Suporte de API do driver JDBC¶
O driver JDBC tipo 4 do Snowflake tem suporte para a funcionalidade JDBC de base na versão 1.0 da API do JDBC. Para uma referência completa da API, consulte a documentação de tecnologias Java SE. Você está convidado a experimentar métodos das versões posteriores do API, mas o Snowflake não garante que estes métodos tenham suporte.
O driver Snowflake JDBC requer Java LTS (Long-Term Support) versão 1.8 ou superior. O driver requer o pacote java.sql
, que está incluído na Standard Edition (SE) e na Enterprise Edition (EE) do Java. A partir de agosto de 2019, a documentação do pacote java.sql
está disponível em https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html
O driver pode ser usado com a maioria das ferramentas e aplicativos do cliente com suporte para JDBC para conexão a um servidor de banco de dados.
Este tópico não documenta toda a API do JDBC. Ao invés disso, o tópico:
Lista as interfaces com suporte a partir da API do JDBC e os métodos aceitos em cada interface.
Documenta áreas onde o Snowflake estende o padrão de API do JDBC.
Documenta áreas onde o padrão de API do JDBC é ambíguo e a implementação do Snowflake pode se comportar de forma diferente de outros sistemas.
Em geral, se um método for chamado e falhar, ele acionará uma exceção (por exemplo, SQLException
).
As interfaces JDBC aceitas são listadas alfabeticamente e emparelhadas com suas classes de extensão Snowflake correspondentes (onde aplicável).
Neste tópico:
Objeto: CallableStatement
¶
Um CallableStatement é usado para executar um procedimento armazenado.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Métodos sem suporte |
|
Nenhum. |
Comportamento específico do Snowflake¶
Nenhum.
Interface: SnowflakeCallableStatement
¶
A interface SnowflakeCallableStatement contém métodos específicos do Snowflake. Quando você usa o driver JDBC do Snowflake para criar um objeto do tipo CallableStatement, por exemplo chamando o método Connection.prepareCall(), você recebe um objeto de um tipo diferente (oculto) específico do Snowflake, que implementa tanto a interface JDBC CallableStatement quanto a interface SnowflakeCallableStatement. Para acessar os métodos SnowflakeCallableStatement naquele objeto, você desencapsula o objeto.
Métodos adicionais¶
Nome do método |
Descrição |
---|---|
|
Retorna a ID da consulta do Snowflake executada mais recentemente desta |
- getQueryID()¶
- Objetivo:
Este método retorna a ID da consulta do Snowflake executada mais recentemente desta
CallableStatement
Se nenhuma consulta tiver sido executada ainda com a instrução chamável, o método retorna nulo.- Argumentos:
Nenhum.
- Retornos:
Este método retorna a ID como uma cadeia de caracteres que contém uma UUID. As informações sobre UUIDs estão incluídas na descrição da função SQL UUID_STRING.
- Gera:
O método pode gerar
SQLException
.
Objeto: Connection
¶
Um objeto Connection
representa uma conexão a um servidor de banco de dados. O objeto de conexão permite aos usuários não apenas conectar-se a um determinado servidor de banco de dados, mas também criar objetos Statement
, que podem ser usados para executar instruções SQL.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte abaixo) |
|
|
|
|
|
|
|
Chamar este método causa uma |
|
Chamar este método causa uma |
|
|
|
|
Métodos sem suporte |
|
|
|
|
Comportamento específico do Snowflake¶
close()
Fecha o objeto. Após um objeto ter sido fechado, chamar quase qualquer método do objeto fechado acionará uma
SQLException
. Chamarclose
para um objeto já fechado é algo inofensivo e não aciona uma exceção.
getMetaData()
Permite obter metadados sobre o driver JDBC e o Snowflake. Por exemplo, você pode descobrir se as transações têm suporte.
Para obter mais informações sobre os métodos que você pode chamar para o valor retornado, consulte Objeto: DatabaseMetaData.
prepareStatement(String sql)
Este método retorna um objeto
preparedStatement
que pode ser usado para executar a instrução SQL. O métodoexecute()
do objetopreparedStatement
pode ser chamado para executar a instrução. A instrução pode ser executada como está ou após a vinculação de valores à instrução.Nota
Em alguns sistemas, após uma instrução ter sido preparada, ela pode ser executada repetidamente sem ser recompilada. Preparar-se uma vez e executar repetidamente pode economizar uma pequena quantidade de tempo e recursos.
No Snowflake, prepareStatement() não compila realmente o código. Em vez disso,
PreparedStatement.execute()
,PreparedStatement.executeQuery()
ePreparedStatement.executeUpdate()
compilam e executam a instrução. Portanto, preparar a instrução antes da execução não economiza recursos em comparação com apena usarStatement.execute()
.prepareCall(String sql)
prepareCall(String sql, boolean)
prepareCall(String sql, int, int)
prepareCall(String sql, int, int, int)
Como na maioria das implementações JDBC, os métodos
prepareCall
podem ser usados para vincular parâmetros a um procedimento armazenado. Por exemplo, é permitido o seguinte:CallableStatement stmt = testConnection.prepareCall("call read_result_set(?,?) ");
Entretanto, no driver JDBC do Snowflake, os métodos
prepareCall
não aceitam a sintaxe? =
para permitir a vinculação do valor de retorno de um procedimento armazenado. Por exemplo, o seguinte não é permitido:CallableStatement stmt = testConnection.prepareCall("? = call read_result_set() "); -- INVALID
Interface: SnowflakeConnection
¶
A interface SnowflakeConnection contém métodos específicos do Snowflake. Quando você usa o driver JDBC do Snowflake para criar um objeto do tipo Connection, por exemplo chamando o método DriverManager.getConnection(), você recebe um objeto de um tipo diferente (oculto) específico do Snowflake, que implementa tanto a interface de conexão do JDBC quanto a interface SnowflakeConnection. Para acessar os métodos SnowflakeConnection naquele objeto, você desencapsula o objeto.
Métodos adicionais¶
Estes métodos são adicionais aos métodos aceitos pela interface JDBC Connection
.
Nome do método |
Descrição |
---|---|
|
Dada a ID de consulta de uma instrução SQL iniciada assincronamente, recupera os resultados da consulta e os retorna em um objeto ResultSet. |
|
Baixa um arquivo do estágio interno dado e retorna um InputStream. |
|
Obtém a ID da sessão atual. |
|
Método |
|
Comprime os dados de um fluxo e os carrega no caminho e nome de arquivo especificados em um estágio interno. |
- public ResultSet createResultSet(String queryID)
- Objetivo:
Dada a queryID de uma instrução SQL iniciada assincronamente, recupera os resultados da consulta e os retorna em um objeto ResultSet.
Este método normalmente pode ser chamado até 24 horas após o término da instrução SQL.
- Argumentos:
queryID: A ID da consulta para a qual você quer resultados.
- Retornos:
O ResultSet. Se a consulta ainda não tiver terminado, o servidor retorna um ResultSet “vazio”. O usuário pode chamar
resultSet.unwrap(SnowflakeResultSet.class).getStatus()
para saber quando os dados estão disponíveis.- Gera:
Este método pode gerar
SQLException
.- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular o objeto Connection.
- Exemplos:
ResultSet resultSet; resultSet = connection.unwrap(SnowflakeConnection.class).createResultSet(queryID);
Consulte Exemplos de consultas assíncronas para um exemplo mais extenso que inclui uma chamada a este método.
- public InputStream downloadStream(String stageName, String sourceFileName, boolean decompress)
- Objetivo:
Este método baixa um arquivo do estágio interno e retorna um fluxo de entrada.
- Argumentos:
stageName: Nome do estágio.
sourceFileName: Caminho do arquivo no estágio.
decompress: True se o arquivo estiver compactado.
- Retornos:
Este método retorna um InputStream.
- Gera:
Este método gera SQLException se ocorrer um erro SQL.
- Exemplos:
Para um exemplo parcial, consulte Download de arquivos de dados diretamente de um estágio interno para um fluxo.
- public String getSessionID()
- Objetivo:
Este método retorna a ID da sessão atual.
- Argumentos:
Nenhum
- Retornos:
Retorna a ID da sessão como uma cadeia de caracteres.
- Gera:
Este método gera SQLException se ocorrer algum erro SQL; por exemplo, se a conexão estiver fechada.
- Notas de uso:
Como a ID da sessão não muda enquanto a conexão está aberta, a ID é armazenada em cache localmente (em vez de ser recuperada do servidor a cada vez) para melhorar o desempenho.
- public prepareStatement(String sql, Boolean skipParsing)
Este método está obsoleto. O parâmetro skipParsing não afeta mais o comportamento do método; esse método se comporta da mesma forma que o método
prepareStatement(String sql)
, independentemente da configuração do parâmetro skipParsing.O novo código deve usar o método
prepareStatement(String sql)
.Quando conveniente, o código existente que usa a versão de dois argumentos deste método deve ser atualizado para usar o método de um argumento
prepareStatement(String sql)
.
- public void uploadStream(String stageName, String destPrefix, InputStream inputStream, String destFileName, boolean compressData)
- Objetivo:
Este método compacta os dados de um fluxo e os carrega em um local de estágio interno. Os dados serão carregados como um único arquivo. Nenhuma divisão é feita com este método.
- Argumentos:
stageName: Nome do estágio (por exemplo,
~
ou nome da tabela ou nome do estágio).destPrefix: Caminho/prefixo sob o qual os dados devem ser carregados no estágio.
inputStream: Fluxo de entrada a partir do qual os dados serão carregados.
destFileName: Nome do arquivo de destino a ser utilizado.
compressData: Compactar dados ou não antes de carregar o fluxo.
- Retornos:
Nada.
- Gera:
Este método gera uma
java.sql.SQLException
se não conseguir compactar e colocar os dados de um fluxo no estágio.- Notas:
O chamador é responsável por liberar o
inputStream
depois que o método é chamado.- Exemplos:
Para um exemplo parcial, consulte Upload de arquivos de dados diretamente de um fluxo para um estágio interno.
Objeto: DatabaseMetaData
¶
A classe DatabaseMetaData fornece informações sobre os recursos que o servidor de banco de dados (neste caso, o Snowflake) aceita.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tem suporte para curingas para o argumento |
|
Tem suporte para curingas para os argumentos |
|
Tem suporte para nulo para os argumentos |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tem suporte para nulo para os argumentos |
|
|
|
Tem suporte para curingas para os argumentos |
|
Tem suporte para curingas para os argumentos |
|
|
|
Tem suporte para nulo para os argumentos |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tem suporte para nulo para os argumentos |
|
Tem suporte para curingas para os argumentos |
|
Tem suporte para curingas para os argumentos |
|
|
|
|
|
Tem suporte para curingas para o argumento |
|
|
|
|
|
|
|
|
|
Tem suporte para curingas para os argumentos |
|
|
|
|
|
Tem suporte para curingas para os argumentos |
|
Tem suporte para curingas para os argumentos |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Métodos sem suporte |
|
|
|
|
Comportamento específico do Snowflake¶
- public ResultSet getColumnPrivileges(String, String, String, String)
Este método sempre retorna um conjunto vazio porque o Snowflake não tem suporte para privilégios em nível de coluna.
- public ResultSet getStreams(String, String, String)
- Objetivo:
Este método retorna informações sobre fluxos contidos em bancos de dados e esquemas especificados.
- Argumentos:
- Retornos:
Este método retorna um
ResultSet
contendo linhas para cada fluxo, com cada linha incluindo as seguintes colunas:name
: Nome do fluxo.database_name
: Nome do banco de dados para o esquema que contém o fluxo.Um objeto de banco de dados (por exemplo, um fluxo) está contido em um esquema, que por sua vez está contido em um banco de dados.
schema_name
: Nome do esquema que contém o fluxo.owner
: Função proprietária do fluxo.comment
: Comentários associados ao fluxo.table_name
: Nome da tabela cujas atualizações DML são rastreadas pelo fluxo.source_type
: Objeto de origem para o fluxo. Os valores possíveis incluem:table
view
directory table
external table
base_tables
: Tabelas subjacentes para a exibição. Esta coluna se aplica apenas aos fluxos em exibições.type
: Tipo do fluxo. Atualmente, a função sempre retornaDELTA
.stale
: Se o fluxo foi lido pela última vez antes da hora destale_after
passar. SeTRUE
, o fluxo pode estar obsoleto.Quando um fluxo está obsoleto, ele não pode ser lido. Você pode recriar o fluxo para retomar a leitura a partir dele. Para evitar que um fluxo fique obsoleto, você precisa consumi-lo antes que a hora
stale_after
tenha passado.mode
: Tipo de fluxo. Os valores possíveis incluem:APPEND_ONLY
: Indica que o fluxo é apenas para anexação.INSERT_ONLY
: Indica que o fluxo só retorna informações para as linhas inseridas. Este valor se aplica apenas aos fluxos em tabelas externas.DEFAULT
: Indica que o fluxo está em tabelas.
- Gera:
Este método gera um
SQLException
se ocorrer um erro SQL.
Suporte para parâmetros nulos¶
Alguns métodos DatabaseMetaData aceitam null
valores para nomes de objetos do banco de dados (por exemplo, nomes de tabelas/catálogos). Por padrão, um valor null
significa que o método não filtra com esse argumento. Por exemplo, se você passar getColumns()
um valor null
para o argumento schemaPattern
, então getColumns()
retorna valores para todos os esquemas.
Para alguns desses métodos, o comportamento padrão para argumentos null
pode ser substituído pelos seguintes parâmetros:
Suporte para curingas em nomes de objetos de banco de dados¶
Alguns métodos DatabaseMetaData têm suporte para curingas com correspondência de padrões em nomes de objetos de banco de dados, tais como nomes de tabelas/catálogos. Os caracteres curingas com suporte são:
%
: Corresponde a qualquer cadeia de zero ou mais caracteres._
: Corresponde a qualquer um dos caracteres.
O exemplo a seguir mostra o que passar para o método getColumns()
para obter os nomes de todas as tabelas e todas as colunas no banco de dados (TEMPORARYDB1
) e esquema (TEMPORARYSCHEMA1
) especificados:
getColumns( connection,
"TEMPORARYDB1", // Database name.
"TEMPORARYSCHEMA1", // Schema name.
"%", // All table names.
"%" // All column names.
);
É comum que nomes de objetos de banco de dados, como nomes de tabelas, contenham sublinhados, por exemplo SHIPPING_ADDRESSES
. Pesquisar SHIPPING_ADDRESSES
sem usar um caractere de escape para o sublinhado encontrará não apenas a tabela chamada SHIPPING_ADDRESSES
, mas também tabelas como SHIPPING2ADDRESSES
. Se você quiser pesquisar SHIPPING_ADDRESSES
, mas não SHIPPING2ADDRESSES
, precisa usar um caractere de escape para o caractere curinga para indicar que ele deve ser tratado como um literal. Use uma barra invertida como caractere de escape.
A própria barra invertida também deve ter um caractere de escape se você quiser usá-la como um caractere literal. Por exemplo, para pesquisar uma tabela chamada T_&
, na qual o sublinhado, o E comercial e a barra invertida são partes literais do nome, e não caracteres curinga ou caracteres de escape, a chamada do método deve ser semelhante ao seguinte:
getColumns(
connection, "TEMPORARYDB1", "TEMPORARYSCHEMA1", "T\\_\\\\", "%" // All column names.
);
Cada barra invertida acima deve ter um caractere de escape a mais, porque o compilador Java espera que as barras tenham esse caractere de escape:
Java sees...............: T\\_\\%\\\\
SQL sees................: T\_\%\\
The actual table name is: T_%\
Objeto: Driver
¶
O driver fornece métodos que permitem obter uma conexão com o banco de dados, assim como obter informações sobre o próprio driver.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake¶
Nenhum.
Exemplos¶
O seguinte trecho de código mostra parte de um programa para obter informações de propriedade:
// Demonstrate the Driver.getPropertyInfo() method.
public static void do_the_real_work(String connectionString) throws Exception {
Properties properties = new Properties();
Driver driver = DriverManager.getDriver(connectionString);
DriverPropertyInfo[] dpinfo = driver.getPropertyInfo("", properties);
System.out.println(dpinfo[0].description);
}
Observe que, no caso geral, a chamada para este método deve estar dentro de um loop. Se você recuperar informações sobre uma propriedade e depois definir essa propriedade, a nova configuração pode fazer com que propriedades adicionais sejam relevantes, então você pode precisar recuperá-las e defini-las.
Objeto: ParameterMetaData
¶
Isto fornece informações sobre parâmetros em um PreparedStatement.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
|
|
|
|
|
|
|
|
|
|
|
Métodos sem suporte |
|
|
|
|
|
|
Comportamento específico do Snowflake¶
Nenhum.
Objeto: PreparedStatement
¶
A interface PreparedStatement descreve métodos que, por exemplo, permitem a execução de consultas.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
Métodos sem suporte |
|
|
|
|
|
|
Comportamento específico do Snowflake¶
addBatch()
Com suporte apenas para instruções INSERT.
O método
addBatch
(combinado comexecuteBatch
) permite a inserção de múltiplas linhas de dados como parte de uma única instrução INSERT.A diferença entre usar um lote ou não é semelhante à diferença entre usar uma inserção de várias linhas e uma inserção de uma única linha:
INSERT INTO t1 (c1, c2) VALUES (1, 'One'); -- single row inserted. INSERT INTO t1 (c1, c2) VALUES (1, 'One'), -- multiple rows inserted. (2, 'Two'), (3, 'Three');
Inserir lotes de linhas é geralmente mais eficiente do que inserir o mesmo número de linhas em instruções
INSERT
individuais. A vantagem é ainda maior quando se utiliza AUTOCOMMIT (isto é, quando cada INSERT é uma transação individual).Para um exemplo de uso do
addBatch
, consulte Inserções em lote.Nota
Há um limite máximo para o tamanho dos dados que você pode vincular ou que pode combinar em um lote. Para obter mais detalhes, consulte Limites no tamanho do texto de consulta.
execute()
Este método compila e executa a instrução SQL que foi fornecida quando o objeto
PreparedStatement
foi criado. A instrução pode ser qualquer tipo de instrução SQL. O métodoexecute()
não retorna umResultSet
.Este método não retorna nada. Se estiver executando uma consulta e precisar obter um
ResultSet
quando a instrução for executada, então use o métodoexecuteQuery()
.executeQuery()
Este método compila e executa a instrução SQL que foi fornecida quando o objeto
PreparedStatement
foi criado e retorna umResultSet
.executeUpdate()
Este método compila e executa a instrução SQL que foi fornecida quando o objeto
PreparedStatement
foi criado. A instrução deve ser DML (INSERT, UPDATE, DELETE, etc.) ou uma instrução SQL que não retorne nada (por exemplo, uma instrução DDL).O método
executeUpdate()
retorna um número inteiro, que é o número de linhas atualizadas se a instrução for DML. Se a instrução não atualizou nenhuma linha, a função retorna0
.Se você precisar executar uma instrução SQL que retorna um ResultSet, então use um método diferente, tal como executeQuery().
setObject()
Quando você vincula uma variável de carimbo de data/hora a uma coluna de carimbo de data/hora, pode usar este método para especificar a variação do carimbo (TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ) que deve ser usada para interpretar o valor do carimbo. Para obter mais detalhes, consulte Vinculação de variáveis a colunas de carimbo de data/hora.
Interface: SnowflakePreparedStatement
¶
A interface SnowflakePreparedStatement contém métodos específicos do Snowflake. Quando você usa o driver JDBC do Snowflake para criar um objeto do tipo PreparedStatement, por exemplo chamando o método Connection.prepareStatement(), você recebe um objeto de um tipo diferente (oculto) específico do Snowflake, que implementa tanto a interface JDBC PreparedStatement quanto a interface SnowflakePreparedStatement. Para acessar os métodos SnowflakePreparedStatement naquele objeto, você desencapsula o objeto.
Métodos adicionais¶
Os métodos abaixo se somam aos métodos com suporte na interface PreparedStatement
.
Nome do método |
Descrição |
---|---|
|
Realiza uma consulta assíncrona. |
|
Retorna a ID da consulta do Snowflake executada mais recentemente desta |
- executeAsyncQuery()¶
- Objetivo:
Este método realiza uma consulta assíncrona, que envolve o envio de uma instrução SQL para execução, retornando depois o controle ao chamador sem esperar que a consulta termine.
Qualquer instrução SQL válida para
executeQuery()
também é válida paraexecuteAsyncQuery()
.Nota
As instruções de transferência de arquivos, tais como PUT e GET, são válidas para
executeAsyncQuery()
, mas comportam-se de forma síncrona.- Argumentos:
Nenhum.
- Retornos:
Um ResultSet “vazio”. O usuário deve pesquisar o conjunto de resultados chamando
resultSet.unwrap(SnowflakeResultSet.class).getStatus()
até que os resultados da consulta fiquem disponíveis.- Gera:
Este método pode gerar
SQLException
.- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular o objeto PreparedStatement.
- Exemplos:
... PreparedStatement prepStatement = connection.prepareStatement("insert into testTable values (?)"); prepStatement.setInt(1, 33); ResultSet rs = prepStatement.executeAsyncQuery(); ...
Consulte Exemplos de consultas assíncronas para um exemplo mais extenso usando o método
SnowflakeStatement.executeAsyncQuery()
bastante semelhante.
- getQueryID()
- Objetivo:
Este método retorna a ID da consulta do Snowflake executada mais recentemente desta
SnowflakePreparedStatement
Se nenhuma consulta tiver sido executada ainda com esta instrução preparada, o método retorna nulo.- Argumentos:
Nenhum.
- Retornos:
O método retorna a ID como uma cadeia de caracteres que contém uma UUID.
- Gera:
O método pode gerar
SQLException
.- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular o
SnowflakePreparedStatement
.Para consultas assíncronas, a ID da consulta não se torna disponível até que a execução da instrução esteja concluída. Se você chamar
SnowflakePreparedStatement.getQueryID()
após chamarexecuteAsyncQuery()
mas antes do fim da execução da instrução, o valor de retorno pode ser NULL. Em vez disso, chameresultSet.unwrap(SnowflakeResultSet.class).getQueryID()
no objetoResultSet
retornado porexecuteAsyncQuery()
.- Exemplos:
Este exemplo parcial mostra como chamar o método:
// Retrieve the query ID from the PreparedStatement. String queryID; queryID = preparedStatement.unwrap(SnowflakePreparedStatement.class).getQueryID();
Enum: QueryStatus
¶
O tipo de enumeração é um tipo específico do Snowflake que:
Define as constantes que representam o status de uma consulta assíncrona.
Define métodos que retornam detalhes sobre quaisquer erros ocorridos durante a execução de instruções SQL.
Este tipo de enumeração está no pacote net.snowflake.client.core
.
Constantes de enumeração¶
Cada constante de enumeração representa um status possível diferente para a consulta assíncrona.
Constante de enumeração |
Descrição |
---|---|
RUNNING |
A consulta ainda está em andamento. |
ABORTING |
A consulta está em processo de ser cancelada no lado do servidor. |
SUCCESS |
A consulta foi concluída com sucesso. |
FAILED_WITH_ERROR |
A consulta foi concluída sem sucesso. |
QUEUED |
A consulta está enfileirada para execução (ou seja, ainda não começou a funcionar), normalmente porque está esperando por recursos. |
DISCONNECTED |
A conexão da sessão está quebrada. O estado da consulta mudará para “FAILED_WITH_ERROR“ em breve. |
RESUMING_WAREHOUSE |
O warehouse está iniciando e a consulta ainda não está em andamento. |
BLOCKED |
A instrução está à espera de um bloqueio mantido por outra instrução. |
NO_DATA |
Os dados sobre a instrução ainda não estão disponíveis, normalmente porque a instrução ainda não começou a ser executada. |
Métodos¶
O tipo de enumeração define os seguintes métodos, que você pode usar para obter detalhes sobre um erro quando o status da consulta é FAILED_WITH_ERROR
.
Nome do método |
Descrição |
---|---|
|
Retorna o código de erro do servidor caso ocorra um erro durante a execução da consulta. |
|
Retorna a mensagem de erro do servidor caso ocorra um erro durante a execução da consulta. |
- getErrorCode()¶
- Objetivo:
Se ocorrer um erro durante a execução da consulta, este método retorna o código de erro do servidor.
- Argumentos:
Nenhum.
- Retornos:
O método retorna o código de erro como um
int
. Se nenhum erro ocorreu, o método retorna o valor0
.- Exemplos:
QueryStatus queryStatus = resultSet.unwrap(SnowflakeResultSet.class).getStatus(); if (queryStatus == queryStatus.FAILED_WITH_ERROR) { // Print the error code to stdout System.out.format("Error code: %d%n", queryStatus.getErrorCode()); }
Consulte Exemplos de consultas assíncronas para um exemplo mais extenso que inclui uma chamada a este método.
- getErrorMessage()¶
- Objetivo:
Se ocorrer um erro durante a execução da consulta, este método retorna a mensagem de erro do servidor.
- Argumentos:
Nenhum.
- Retornos:
O método retorna a mensagem de erro como um
String
. Se nenhum erro ocorreu, o método retorna o valorNo error reported
.- Exemplos:
QueryStatus queryStatus = resultSet.unwrap(SnowflakeResultSet.class).getStatus(); if (queryStatus == queryStatus.FAILED_WITH_ERROR) { // Print the error message to stdout System.out.format("Error message: %s%n", queryStatus.getErrorMessage()); }
Consulte Exemplos de consultas assíncronas para um exemplo mais extenso que inclui uma chamada a este método.
Objeto: ResultSet
¶
A interface ResultSet documenta métodos que recuperam os resultados das consultas; por exemplo, para ler as linhas e colunas retornadas por uma instrução SELECT.
Um ResultSet do Snowflake é um objeto somente de leitura; não é atualizável.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
Métodos sem suporte |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake¶
close()
Fecha o objeto. Após um objeto ter sido fechado, chamar quase qualquer método do objeto fechado acionará uma
SQLException
. Chamarclose
para um objeto já fechado é algo inofensivo e não aciona uma exceção.getDate()
,getTime()
,getTimestamp()
Na versão 3.12.17 e versões posteriores do driver JDBC, estes métodos utilizam o fuso horário da sessão (especificado pelo parâmetro TIMEZONE). As versões mais antigas utilizam o fuso horário do JVM.
Para mudar estes métodos para usar o fuso horário do JVM, defina o parâmetro JDBC_USE_SESSION_TIMEZONE como
FALSE
.getMetaData()
Se o objeto ResultSet for para uma consulta assíncrona, então este método causa um bloqueio até que a consulta tenha terminado de ser executada. Você pode usar
resultSet.unwrap(SnowflakeResultSet.class).getStatus()
para obter o status da consulta antes de chamar este método.next()
Isto faz com que a próxima linha no resultado defina a linha “atual”. Chamadas para os métodos
get*()
, comogetInt()
, obtêm valores da linha atual.Se o
ResultSet
tiver sido fechado por uma chamada para o métodoclose
, então chamadas subsequentes paranext
retornam false, em vez de acionar uma exceção.Se o objeto ResultSet for para uma consulta assíncrona, então este método causa um bloqueio até que os resultados fiquem disponíveis. Você pode usar
resultSet.unwrap(SnowflakeResultSet.class).getStatus()
para obter o status da consulta antes de chamar este método.
Interface: SnowflakeResultSet
¶
A interface SnowflakeResultSet contém métodos específicos do Snowflake. Quando você usa o driver JDBC do Snowflake para criar um objeto do tipo ResultSet, por exemplo chamando o método Statement.getResultSet(), você recebe um objeto de um tipo diferente (oculto) específico do Snowflake, que implementa tanto a interface JDBC ResultSet quanto a interface SnowflakeResultSet. Para acessar os métodos SnowflakeResultSet naquele objeto, você desencapsula o objeto.
Métodos adicionais¶
Nome do método |
Descrição |
---|---|
|
Retorna a ID da consulta do Snowflake da instrução que gerou este conjunto de resultados. |
|
Para um ResultSet retornado por uma consulta assíncrona, retorna o status da consulta. |
- getQueryID()
- Objetivo:
Este método retorna a ID da consulta do Snowflake da instrução que gerou este conjunto de resultados.
- Argumentos:
Nenhum.
- Retornos:
O método retorna a ID como uma cadeia de caracteres que contém uma UUID.
- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular o
ResultSet
.- Exemplos:
String queryID2; queryID2 = resultSet.unwrap(SnowflakeResultSet.class).getQueryID();
- getStatus()¶
- Objetivo:
Para um ResultSet retornado por uma consulta assíncrona, como
SnowflakeStatement.executeAsyncQuery()
, este método retorna o status da consulta. O status indica se a consulta foi concluída com sucesso, sem sucesso, ou se ainda não foi concluída.- Argumentos:
Nenhum.
- Retornos:
- Gera:
Este método pode gerar
SQLException
.- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular o objeto ResultSet.
- Exemplos:
QueryStatus queryStatus = resultSet.unwrap(SnowflakeResultSet.class).getStatus();
Consulte Exemplos de consultas assíncronas para um exemplo mais extenso que inclui uma chamada a este método.
Objeto: ResultSetMetaData
¶
Isto fornece informações sobre um ResultSet, por exemplo, o número de colunas no ResultSet.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Métodos sem suporte |
|
Nenhum. |
Comportamento específico do Snowflake¶
A classe
ResultSetMetaData
não tem um métodoclose()
. Um objetoResultSetMetaData
aberto é fechado implicitamente quando o usuário fecha oResultSet
a partir do qual o objetoResultSetMetaData
foi criado.getCatalogName()
,getSchemaName()
,getTableName()
Se o objeto ResultSet for para uma consulta assíncrona, estes métodos retornam cadeias de caracteres vazias.
Nas colunas GEOGRAPHY,
getColumnTypeName
retornaGEOGRAPHY
.Observe que os métodos
getColumnType
egetColumnClassName
não indicam que o tipo de coluna éGEOGRAPHY
.
Interface: SnowflakeResultSetMetaData
¶
A interface SnowflakeResultSetMetaData contém métodos específicos do Snowflake. Quando você usa o driver JDBC do Snowflake para criar um objeto do tipo ResultSetMetaData, por exemplo chamando o método ResultSet.getMetaData(), você recebe um objeto de um tipo diferente (oculto) específico do Snowflake, que implementa tanto a interface JDBC ResultSetMetaData quanto a interface SnowflakeResultSetMetaData. Para acessar os métodos SnowflakeResultSetMetaData naquele objeto, você desencapsula o objeto.
Métodos adicionais¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
|
|
|
|
|
|
- getColumnIndex(String columnName):
- Objetivo:
Retorna o índice da coluna que corresponde a columnName. Por exemplo, se uma coluna chamada “BirthDate“ for a terceira coluna da tabela, então getColumnIndex(“BirthDate“) retorna 2. (Os índices são baseados em 0, não em 1).
- Argumentos:
O nome da coluna para a qual você quer encontrar o índice.
- Retornos:
Retorna um número inteiro que contém o índice da coluna que corresponde a columnName. Se columnName não corresponder a nenhuma coluna no conjunto de resultados, isto retorna -1.
- Gera:
O método pode gerar
SQLException
.
- getColumnNames():
- Objetivo:
Esta função retorna a lista de todos os nomes de colunas no conjunto de resultados.
Isto é diferente da função getColumnName(int column) em ResultSetMetaData, que retorna um único nome de coluna baseado em um índice.
- Argumentos:
Nenhum.
- Retornos:
O tipo de dados do valor retornado é “List<cadeia de caracteres>”. A lista contém os nomes das colunas. Os nomes estão na mesma ordem que os índices das colunas.
- Gera:
O método pode gerar
SQLException
.
- getInternalColumnType(int column):
- Objetivo:
Retorna o tipo de dados da coluna especificada.
- Argumentos:
column: Indica o índice (baseado em 1) da coluna para a qual você quer o tipo de dados.
- Retornos:
Retorna o tipo de dados da coluna especificada. O tipo de dados é um número inteiro.
- Gera:
O método pode gerar
SQLException
.
- getQueryID()
- Objetivo:
Retorna a ID da consulta do Snowflake à qual se aplicam estes metadados.
- Argumentos:
Nenhum.
- Retornos:
Este método retorna a ID da consulta para a qual estes metadados foram gerados. A ID da consulta é uma cadeia de caracteres que contém uma UUID. As informações sobre UUIDs estão incluídas na descrição da função SQL UUID_STRING.
- Gera:
O método pode gerar
SQLException
.
Objeto: SnowflakeTimestampWithTimezone
¶
Um objeto SnowflakeTimestampWithTimezone
fornece informações sobre o fuso horário associado ao objeto Java Timestamp
do carimbo de data/hora. Você pode usar este objeto para extrair o fuso horário diretamente, em vez de analisar as informações da cadeia de caracteres Java Timestamp
. Para acessar esta funcionalidade, você deve importar as seguintes bibliotecas Java:
java.sql.Timestamp;
java.time.ZonedDateTime;
java.util.TimeZone;
Métodos¶
Nome do método |
Notas |
---|---|
Construtores |
|
SnowflakeTimestampWithTimezone(
long seconds,
int nanoseconds,
TimeZone tz)
|
|
SnowflakeTimestampWithTimezone(
Timestamp ts,
TimeZone tz)
|
|
SnowflakeTimestampWithTimezone(
Timestamp ts)
|
|
Métodos com suporte |
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
Comportamento específico do Snowflake¶
getTimezone()
Retorna o fuso horário a partir do carimbo de data/hora.
import java.sql.Timestamp; import java.time.ZonedDateTime; import java.util.TimeZone; public void testGetTimezone() { String timezone = "Australia/Sydney"; // Create a timestamp from a point in time Long datetime = System.currentTimeMillis(); Timestamp currentTimestamp = new Timestamp(datetime); SnowflakeTimestampWithTimezone ts = new SnowflakeTimestampWithTimezone(currentTimestamp, TimeZone.getTimeZone(timezone)); // Verify timezone was set assertEquals(ts.getTimezone().getID(), timezone); }
toZonedDateTime()
Converte um carimbo de data/hora
SnowflakeTimestampWithTimezone
em um objeto de data com fuso (objeto JavaZonedDateTime
).import java.sql.Timestamp; import java.time.ZonedDateTime; import java.util.TimeZone; public void testToZonedDateTime() { String timezone = "Australia/Sydney"; String zonedDateTime = "2022-03-17T10:10:08+11:00[Australia/Sydney]"; // Create a timestamp from a point in time Long datetime = 1647472208000L; Timestamp timestamp = new Timestamp(datetime); SnowflakeTimestampWithTimezone ts = new SnowflakeTimestampWithTimezone(timestamp, TimeZone.getTimeZone(timezone)); ZonedDateTime zd = ts.toZonedDateTime(); // Verify timestamp was converted to zoned datetime assertEquals(zd.toString(), zonedDateTime); }
Objeto: Statement
¶
Um objeto Statement
representa uma instrução SQL. O objeto de instrução permite que os usuários executem tarefas como:
Execute uma instrução SQL.
Definir um tempo limite para a execução da instrução.
Recuperar um conjunto de resultados para uma consulta.
Métodos¶
Nome do método |
Notas |
---|---|
Métodos com suporte |
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake (consulte detalhes abaixo). |
|
|
|
|
|
|
Métodos sem suporte |
|
|
|
|
|
|
|
|
Comportamento específico do Snowflake¶
close()
Este método fecha o objeto. Após um objeto ter sido fechado, chamar quase qualquer método do objeto fechado acionará uma
SQLException
. Chamarclose
para um objeto já fechado é algo inofensivo e não aciona uma exceção.getBatchQueryID()
Este método retorna uma lista de IDs de consulta do Snowflake do lote de consultas executadas mais recentemente desta
Statement
. Se nenhuma consulta tiver sido executada ainda com a instrução, o método retorna nulo.Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular a instrução. Por exemplo:
connection.setAutoCommit(false); statement.addBatch("SELECT 1;"); statement.addBatch("SELECT 2;"); statement.executeBatch(); connection.commit(); connection.setAutoCommit(true); List<String> batchQueryIDs1; // Since getQueryID is not standard JDBC API, we must call unwrap() to // use these Snowflake methods. batchQueryIDs1 = statement.unwrap(SnowflakeStatement.class).getBatchQueryIDs(); int num_query_ids = batchQueryIDs1.size(); if (num_query_ids != 2) { System.out.println("ERROR: wrong number of query IDs in batch 1."); } // Check that each query ID is plausible. for (int i = 0; i < num_query_ids; i++) { String qid = batchQueryIDs1.get(i); if (!is_plausible_query_id(qid)) { msg = "SEVERE WARNING: suspicious query ID in batch"; System.out.println("msg"); System.out.println(qid); } }
getUpdateCount()
Este método retorna o número de linhas atualizadas pela instrução SQL executada mais recentemente.
Se a instrução for DML (INSERT, UPDATE, DELETE, etc.), então
getUpdateCount()
retorna o número de linhas que foram adicionadas, excluídas ou alteradas. Observe que este valor pode ser0
se nenhuma linha for alterada.Se a instrução for SELECT, então
getUpdateCount()
retorna-1
.Se a instrução for DDL, então
getUpdateCount()
retorna-1
.
Interface: SnowflakeStatement
¶
A interface SnowflakeStatement contém métodos específicos do Snowflake. Quando você usa o driver JDBC do Snowflake para criar um objeto do tipo , por exemplo chamando o método Connection.createStatement(), você recebe um objeto de um tipo diferente (oculto) específico do Snowflake, que implementa tanto a interface de instrução JDBC quanto a interface SnowflakeStatement. Para acessar os métodos SnowflakeStatement naquele objeto, você desencapsula o objeto.
Métodos adicionais¶
Nome do método |
Descrição |
---|---|
|
Realiza uma consulta assíncrona. |
|
Retorna a ID da consulta do Snowflake executada mais recentemente desta |
|
Define os parâmetros específicos do Snowflake. |
- executeAsyncQuery(String)
- Objetivo:
Este método realiza uma consulta assíncrona, que envolve o envio de uma instrução SQL para execução, retornando depois o controle ao chamador sem esperar que a consulta termine.
- Argumentos:
Uma cadeia de caracteres contendo o comando SQL a executar. Qualquer instrução SQL válida para
executeQuery()
também é válida paraexecuteAsyncQuery()
.Nota
As instruções de transferência de arquivos, tais como PUT e GET, são válidas para
executeAsyncQuery()
, mas comportam-se de forma síncrona.- Retornos:
Um ResultSet “vazio”. O usuário deve pesquisar o conjunto de resultados chamando
resultSet.unwrap(SnowflakeResultSet.class).getStatus()
até que os resultados da consulta fiquem disponíveis.- Gera:
O método pode gerar
SQLException
.- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular o objeto Statement.
- Exemplos:
Consulte Exemplos de consultas assíncronas para um exemplo que inclui uma chamada a este método.
- getQueryID()
- Objetivo:
Este método retorna a ID da consulta do Snowflake executada mais recentemente desta
Statement
- Argumentos:
Nenhum.
- Retornos:
A ID da consulta executada mais recentemente desta instrução. A ID da consulta é uma cadeia de caracteres que contém uma UUID. Se nenhuma consulta tiver sido executada ainda com a instrução, o método retorna nulo.
- Gera:
O método pode gerar
SQLException
.- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular a instrução.
Para consultas assíncronas, a ID da consulta não se torna disponível até que a execução da instrução esteja concluída. Se você chamar
SnowflakeStatement.getQueryID()
após chamarexecuteAsyncQuery()
mas antes do fim da execução da instrução, o valor de retorno pode ser NULL. Em vez disso, chameresultSet.unwrap(SnowflakeResultSet.class).getQueryID()
no objetoResultSet
retornado porexecuteAsyncQuery()
.- Exemplos:
String queryID1; queryID1 = statement.unwrap(SnowflakeStatement.class).getQueryID();
- setParameter(String parameter_name, <type> <value>)¶
- Objetivo:
A classe
SnowflakeStatement
fornece o métodosetParameter
como uma extensão do Snowflake. Isto permite que o chamador defina parâmetros JDBC específicos do Snowflake.O método está sobrecarregado. Parâmetros JDBC diferentes requerem tipos de dados diferentes. Existe um método para cada tipo de dados válido que pode ser passado como o segundo argumento para a função.
- Argumentos:
- parameter_name:
Esta cadeia de caracteres precisa conter o nome de um parâmetro JDBC pré-definido do Snowflake. Os parâmetros JDBC pré-definidos (e seus valores ou intervalos válidos) estão listados abaixo:
Parâmetro JDBC
Notas
MULTI_STATEMENT_COUNT
Número inteiro especificando o número de instruções (
0
= número ilimitado de instruções;1
ou superior indica o número exato de instruções que devem ser executadas).- value:
Este é o valor a ser atribuído ao parâmetro JDBC especificado. Certifique-se de que o tipo de dados seja compatível com o parâmetro JDBC que você especificou.
- Retornos:
Nada.
- Gera:
Esta função pode gerar SQLException.
- Notas:
Este método é uma extensão do Snowflake para o padrão JDBC. Para usar este método, você precisa desencapsular a instrução.
- Exemplos:
Statement statement1; ... // Tell Statement to expect to execute 2 statements: statement1.unwrap(SnowflakeStatement.class).setParameter( "MULTI_STATEMENT_COUNT", 2);
Interface: SQLException
¶
Objetos SQLException são gerados por métodos do driver JDBC quando ocorre um erro e contêm informações sobre esse erro.
Nome do método |
Descrição |
---|---|
|
Retorna um código de erro específico do Snowflake. |
|
Isto retorna uma cadeia de caracteres que descreve o erro. |
|
Retorna o SQLState. |
- getErrorCode()
- Objetivo:
Este método retorna um código de erro Snowflake personalizado.
- Argumentos:
Nenhum.
- Retornos:
Um código de erro específico do Snowflake.
- Notas:
Consulte também o método
getSQLState()
.
- getMessage()¶
- Objetivo:
Este método retorna uma cadeia de caracteres que descreve o erro.
- Argumentos:
Nenhum.
- Retornos:
Uma mensagem de erro específica do Snowflake.
- getSQLState()¶
- Objetivo:
Este método retorna uma cadeia de caracteres que contém um valor alfanumérico de 5 caracteres baseado no erro.
- Argumentos:
Nenhum.
- Retornos:
Um SQLState específico do Snowflake. Um SQLState é uma cadeia de 5 caracteres alfanuméricos que indica o erro específico que ocorreu.