Prise en charge de l’API de pilote JDBC

Le pilote Snowflake JDBC est un pilote JDBC de type 4 qui prend en charge la fonctionnalité centrale JDBC de la version 1.0 de l’API JDBC. Pour connaître la référence complète de l’API, consultez la documentation Java SE sur les technologies. Vous pouvez essayer les méthodes des versions ultérieures de l’API, mais Snowflake ne garantit pas que ces méthodes sont prises en charge.

Le pilote JDBC de Snowflake nécessite Java LTS (Long-Term Support) 1.8 (ou une version supérieure). Le pilote nécessite le paquet java.sql, inclus dans les éditions Standard Edition (SE) et Enterprise Edition (EE) de Java. À compter du mois d’août 2019, la documentation du paquet java.sql est disponible à l’adresse https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html.

Le pilote peut être utilisé avec la plupart des outils/applications clients prenant en charge JDBC pour la connexion à un serveur de base de données.

Cette rubrique ne documente pas l’intégralité de l’API JDBC. Au lieu de cela, elle :

  • Répertorie les interfaces prises en charge à partir de l’APIJDBC et les méthodes prises en charge dans chaque interface.

  • Documente les zones où Snowflake étend la norme de l’API JDBC.

  • Documente les zones où la norme de l’API JDBC est ambiguë et l’implémentation de Snowflake peut se comporter différemment des autres systèmes.

En général, si une méthode est appelée et échoue, elle lève une exception (par exemple, SQLException).

Les interfaces JDBC prises en charge sont répertoriées par ordre alphabétique et associées aux classes d’extension Snowflake correspondantes (le cas échéant).

Dans ce chapitre :

Objet : CallableStatement

CallableStatement est utilisé pour exécuter une procédure stockée.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

getBigDecimal(int, int)

getBoolean(int)

getByte(int)

getBytes(int)

getDate(int)

getDouble(int)

getFloat(int)

getInt(int)

getLong(int)

getObject(int)

getShort(int)

getString(int)

getTime(int)

getTimestamp(int)

registerOutParameter(int, int, int)

registerOutParameter(int, int)

wasNull()

Méthodes non prises en charge

Aucun.

Comportement spécifique à Snowflake

Aucun.

Interface : SnowflakeCallableStatement

L’interface SnowflakeCallableStatement contient des méthodes spécifiques à Snowflake. Lorsque vous utilisez le pilote Snowflake JDBC pour créer un objet de type CallableStatement, par exemple en appelant la méthode Connection.prepareCall(), vous obtenez un objet d’un type différent (caché) spécifique à Snowflake, qui implémente l’interface JDBC CallableStatement et l’interface SnowflakeCallableStatement. Pour accéder aux méthodes SnowflakeCallableStatement de cet objet, désencapsulez l’objet.

Méthodes supplémentaires

Nom de la méthode

Description

getQueryID()

Renvoie l’ID de requête Snowflake de la dernière requête exécutée de ce CallableStatement

getQueryID()
But

Cette méthode renvoie l’ID de requête Snowflake de la dernière requête exécutée de ce CallableStatement. Si aucune requête n’a encore été exécutée avec CallableStatement, la méthode renvoie la valeur null.

Arguments

Aucun.

Renvoie

Cette méthode renvoie l’ID en tant que chaîne contenant un UUID. Des informations sur les UUIDs sont incluses dans la description de la fonction SQL UUID_STRING.

Lève

La méthode peut lever une SQLException.

Objet : Connection

Un objet Connection représente une connexion à un serveur de base de données. L’objet de connexion permet aux utilisateurs non seulement de se connecter à un serveur de base de données particulier, mais également de créer des objets Statement pouvant être utilisés pour exécuter des instructions SQL.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

abort()

clearWarnings()

close()

Comportement spécifique à Snowflake (voir ci-dessous).

commit()

createStatement()

createStatement(int, int)

createStatement(int, int, int)

getAutoCommit()

getCatalog()

getClientInfo()

getHoldability()

getMetaData()

Comportement spécifique à Snowflake (voir ci-dessous).

getSchema()

getTransactionIsolation()

getTypeMap()

getWarnings()

isClosed()

isReadOnly()

isValid()

nativeSQL(String)

prepareCall(String)

prepareCall(String, boolean)

prepareCall(String, int, int)

prepareCall(String, int, int, int)

prepareStatement(String)

prepareStatement(String, int)

prepareStatement(String, int[])

prepareStatement(String, String[])

prepareStatement(String, int, int)

prepareStatement(String, int, int, int)

Comportement spécifique à Snowflake (voir ci-dessous)

prepareStatement(String, boolean)

setAutoCommit(boolean)

setCatalog(String)

setClientInfo(String, String)

L’appel de cette méthode lève une SQLClientInfoException.

setClientInfo(Properties)

L’appel de cette méthode lève une SQLClientInfoException.

setReadOnly(boolean)

setSchema(String)

Méthodes non prises en charge

rollback()

setTransactionIsolation(int)

Comportement spécifique à Snowflake

  • close()

    Ferme l’objet. Après la fermeture d’un objet, l’appel de n’importe quelle méthode de cet objet fermé lève une SQLException. L’appel de close sur un objet déjà fermé est sans danger et ne lève pas d’exception.

  • getMetaData()

    Vous permet d’obtenir des métadonnées sur le pilote JDBC et Snowflake. Par exemple, vous pouvez savoir si les transactions sont prises en charge.

    Pour plus d’informations sur les méthodes que vous pouvez appeler sur la valeur renvoyée, voir Objet : DatabaseMetaData.

  • prepareStatement(String sql)

    Cette méthode renvoie un objet preparedStatement qui peut être utilisé pour exécuter l’instruction SQL. La méthode execute() de l’objet preparedStatement peut être appelée pour exécuter l’instruction. L’instruction peut être exécutée telle quelle ou après la liaison de valeurs à l’instruction.

    Note

    Dans certains systèmes, une fois qu’une instruction a été préparée, cette instruction peut être exécutée à plusieurs reprises sans la recompiler. Préparer une fois et exécuter à plusieurs reprises peut économiser un peu de temps et de ressources.

    Dans Snowflake, prepareStatement() ne compile pas le code. À la place, PreparedStatement.execute(), PreparedStatement.executeQuery() et PreparedStatement.executeUpdate() compilent et exécutent l’instruction. Par conséquent, préparer l’instruction avant exécution ne permet pas d’économiser des ressources par rapport à la simple utilisation de Statement.execute().

  • prepareCall(String sql)

  • prepareCall(String sql, boolean)

  • prepareCall(String sql, int, int)

  • prepareCall(String sql, int, int, int)

    Comme dans la plupart des implémentations JDBC, les méthodes prepareCall peuvent être utilisées pour lier des paramètres à une procédure stockée. Par exemple, ce qui suit est pris en charge :

    CallableStatement stmt = testConnection.prepareCall("call read_result_set(?,?) ");
    
    Copy

    Toutefois, dans le pilote Snowflake JDBC, les méthodes prepareCall ne prennent pas en charge la syntaxe ? = pour gérer la liaison de la valeur de retour d’une procédure stockée. Par exemple, la commande suivante n’est pas prise en charge :

    CallableStatement stmt = testConnection.prepareCall("? = call read_result_set() ");  -- INVALID
    
    Copy

Interface : SnowflakeConnection

L’interface SnowflakeConnection contient des méthodes spécifiques à Snowflake. Lorsque vous utilisez le pilote Snowflake JDBC pour créer un objet de type Connection, par exemple en appelant la méthode DriverManager.getConnection(), vous obtenez un objet d’un type différent (caché) spécifique à Snowflake, qui implémente l’interface de connexion JDBC et l’interface SnowflakeConnection. Pour accéder aux méthodes SnowflakeConnection de cet objet, désencapsulez l’objet.

Méthodes supplémentaires

Ces méthodes s’ajoutent aux méthodes prises en charge par l’interface JDBC Connection.

Nom de la méthode

Description

createResultSet(String)

Étant donné l’ID de requête d’une instruction SQL lancée de manière asynchrone, récupère les résultats de la requête et les renvoie dans un objet ResultSet.

downloadStream(String, String, boolean)

Télécharge un fichier à partir de la zone de préparation interne donnée et renvoie un InputStream.

getSessionID()

Obtient l’ID de la session en cours.

prepareStatement(String, Boolean)

Méthode prepareStatement() surchargée (voir ci-dessous pour plus de détails).

uploadStream(String, String, InputStream, String, boolean)

Compresse les données d’un flux et les télécharge vers le chemin et le nom de fichier spécifiés dans une zone de préparation interne.

public ResultSet createResultSet(String queryID)
But

Étant donné le queryID d’une instruction SQL lancée de manière asynchrone, récupère les résultats de la requête et les renvoie dans un objet ResultSet.

Cette méthode peut généralement être appelée jusqu’à 24 heures après la fin de l’instruction SQL.

Arguments

queryID : l’ID de la requête dont vous souhaitez les résultats.

Renvoie

Le ResultSet. Si la requête n’est pas encore terminée, le serveur renvoie un ResultSet « vide ». L’utilisateur peut appeler resultSet.unwrap(SnowflakeResultSet.class).getStatus() pour savoir quand les données sont disponibles.

Lève

Cette méthode peut lever une SQLException.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler l’objet de connexion.

Exemples
ResultSet resultSet;
resultSet = connection.unwrap(SnowflakeConnection.class).createResultSet(queryID);
Copy

Voir Exemples de requêtes asynchrones pour un exemple plus complet qui inclut un appel à cette méthode.

public InputStream downloadStream(String stageName, String sourceFileName, boolean decompress)
But

Cette méthode télécharge un fichier à partir de la zone de préparation interne donnée et renvoie un flux d’entrée.

Arguments

stageName : nom de la zone de préparation.

sourceFileName : chemin du fichier en zone de préparation.

decompress : « true » si le fichier est compressé.

Renvoie

Cette méthode renvoie un InputStream.

Lève

Cette méthode lève une SQLException si une erreur SQL se produit.

Exemples

Pour un exemple partiel, voir Télécharger des fichiers de données directement depuis une zone de préparation interne vers un flux.

public String getSessionID()
But

Cette méthode retourne l’ID de la session en cours.

Arguments

Aucun

Renvoie

Renvoie l’IDde session sous forme de chaîne.

Lève

Cette méthode lève une SQLException si une erreur SQL se produit, par exemple si la connexion est fermée.

Notes sur l’utilisation

Étant donné que l’ID de session ne change pas tant que la connexion est ouverte, l’ID de session est mis en cache localement (au lieu d’être récupérée du serveur chaque fois) pour améliorer les performances.

public prepareStatement(String sql, Boolean skipParsing)

Cette méthode est obsolète. Le paramètre skipParsing n’affecte plus le comportement de la méthode ; cette méthode se comporte comme la méthode prepareStatement(String sql), quel que soit le réglage du paramètre skipParsing.

Le nouveau code doit utiliser la méthode prepareStatement(String sql).

Le cas échéant, le code existant qui utilise la version à deux arguments de cette méthode doit être mis à jour pour utiliser la méthode à un argument prepareStatement(String sql).

public void uploadStream(String stageName, String destPrefix, InputStream inputStream, String destFileName, boolean compressData)
But

Cette méthode compresse les données d’un flux et les charge à un emplacement de zone de préparation interne. Les données seront chargées en un seul fichier. Aucun fractionnement n’est effectué dans cette méthode.

Arguments

stageName : nom de la zone de préparation (par exemple, ~ ou nom de la table ou nom de la zone de préparation).

destPrefix : chemin/préfixe sous lequel les données doivent être chargées dans la zone de téléchargement.

inputStream : flux d’entrée à partir duquel les données seront chargées.

destFileName : nom du fichier de destination à utiliser.

compressData : compressez ou non les données avant de charger le flux.

Renvoie

Rien.

Lève

Cette méthode lève une java.sql.SQLException si elle ne parvient pas à compresser et à mettre les données d’un flux dans la zone de préparation.

Remarques

L’appelant est responsable de la libération de inputStream après l’appel de la méthode.

Exemples

Pour un exemple partiel, voir Charger des fichiers de données directement depuis un flux vers une zone de préparation interne.

Objet : DatabaseMetaData

La classe DatabaseMetaData fournit des informations sur les fonctionnalités prises en charge par le serveur de base de données (dans ce cas, Snowflake).

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

allProceduresAreCallable()

allTablesAreSelectable()

dataDefinitionCausesTransactionCommit()

dataDefinitionIgnoredInTransactions()

doesMaxRowSizeIncludeBlobs()

getCatalogs()

getCatalogSeparator()

getCatalogTerm()

getColumnPrivileges(String, String, String, String)

Prend en charge les caractères génériques pour l’argument columnNamePattern. Prend en charge null pour les arguments catalog, schemaPattern, tableNamePattern et columnNamePattern. Voir Comportement spécifique à Snowflake pour plus d’informations sur cette méthode.

getColumns(String, String, String, String)

Prend en charge les caractères génériques pour les arguments schemaPattern, tableNamePattern et columnNamePattern. Prend en charge null pour les arguments catalog, schemaPattern, tableNamePattern et columnNamePattern.

getCrossReference(String, String, String, String, String, String)

Prend en charge null pour les arguments parentCatalog, parentSchema, parentTable, foreignCatalog, foreignSchema et foreignTable.

getDatabaseProductName()

getDatabaseProductVersion()

getDefaultTransactionIsolation()

getDriverMajorVersion()

getDriverMinorVersion()

getDriverName()

getDriverVersion()

getExportedKeys(String, String, String)

Prend en charge null pour les arguments catalog, schema et table.

getExtraNameCharacters()

getFunctionColumns()

Prend en charge les caractères génériques pour les arguments schemaPattern, functionNamePattern et columnNamePattern. Prend en charge null pour l’argument columnNamePattern.

getFunctions(String, String, String)

Prend en charge les caractères génériques pour les arguments schemaPattern et functionNamePattern. Prend en charge null pour les arguments schemaPattern et functionNamePattern.

getIdentifierQuoteString()

getImportedKeys(String, String, String)

Prend en charge null pour les arguments catalog, schema et table.

getIndexInfo(String, String, String, boolean, boolean)

getMaxBinaryLiteralLength()

getMaxCatalogNameLength()

getMaxCharLiteralLength()

getMaxColumnNameLength()

getMaxColumnsInGroupBy()

getMaxColumnsInIndex()

getMaxColumnsInOrderBy()

getMaxColumnsInSelect()

getMaxColumnsInTable()

getMaxConnections()

getMaxCursorNameLength()

getMaxIndexLength()

getMaxProcedureNameLength()

getMaxRowSize()

getMaxSchemaNameLength()

getMaxStatementLength()

getMaxStatements()

getMaxTableNameLength()

getMaxTablesInSelect()

getMaxUserNameLength()

getNumericFunctions()

getPrimaryKeys(String, String, String)

Prend en charge null pour les arguments catalog, schema et table.

getProcedureColumns(String, String, String, String)

Prend en charge les caractères génériques pour les arguments schemaPattern, procedureNamePattern et columnNamePattern. Prend en charge null pour l’argument columnNamePattern.

getProcedures(String, String, String)

Prend en charge les caractères génériques pour les arguments schemaPattern et procedureNamePattern. Prend en charge null pour l’argument columnNamePattern.

getProcedureTerm()

getSchemas()

getSchemas(String, String)

Prend en charge les caractères génériques pour l’argument schemaPattern. Prend en charge null pour les arguments catalogName et schemaPattern.

getSchemaTerm()

getSearchStringEscape()

getSQLKeywords()

getSQLStateType()

getStreams(String, String, String)

Prend en charge les caractères génériques pour les arguments orignalSchemaPattern et streamName. Prend en charge null pour les arguments originalCatalog, originalSchemaPattern et streamName. Voir Comportement spécifique à Snowflake pour plus d’informations sur cette méthode.

getStringFunctions()

getSystemFunctions()

getTablePrivileges(String, String, String)

Prend en charge les caractères génériques pour les arguments schemaPattern et tableNamePattern. Prend en charge null pour les arguments catalog et schemaPattern.

getTables(String, String, String, String[])

Prend en charge les caractères génériques pour les arguments schemaPattern et tableNamePattern. Prend en charge null pour les arguments catalog, schemaPattern, tableNamePattern et types.

getTableTypes()

getTimeDateFunctions()

getTypeInfo()

getURL()

getUserName()

isCatalogAtStart()

isReadOnly()

nullPlusNonNullIsNull()

nullsAreSortedAtEnd()

nullsAreSortedAtStart()

nullsAreSortedHigh()

nullsAreSortedLow()

storesLowerCaseIdentifiers()

storesLowerCaseQuotedIdentifiers()

storesMixedCaseIdentifiers()

storesMixedCaseQuotedIdentifiers()

storesUpperCaseIdentifiers()

storesUpperCaseQuotedIdentifiers()

supportsAlterTableWithAddColumn()

supportsAlterTableWithDropColumn()

supportsANSI92EntryLevelSQL()

supportsANSI92FullSQL()

supportsANSI92IntermediateSQL()

supportsCatalogsInDataManipulation()

supportsCatalogsInIndexDefinitions()

supportsCatalogsInPrivilegeDefinitions()

supportsCatalogsInProcedureCalls()

supportsCatalogsInTableDefinitions()

supportsColumnAliasing()

supportsConvert()

supportsConvert(int, int)

supportsCoreSQLGrammar()

supportsCorrelatedSubqueries()

supportsDataDefinitionAndDataManipulationTransactions()

supportsDataManipulationTransactionsOnly()

supportsDifferentTableCorrelationNames()

supportsExpressionsInOrderBy()

supportsExtendedSQLGrammar()

supportsFullOuterJoins()

supportsGroupBy()

supportsGroupByBeyondSelect()

supportsGroupByUnrelated()

supportsIntegrityEnhancementFacility()

supportsLikeEscapeClause()

supportsLimitedOuterJoins()

supportsMinimumSQLGrammar()

supportsMixedCaseIdentifiers()

supportsMixedCaseQuotedIdentifiers()

supportsMultipleResultSets()

supportsMultipleTransactions()

supportsNonNullableColumns()

supportsOpenCursorsAcrossCommit()

supportsOpenCursorsAcrossRollback()

supportsOpenStatementsAcrossCommit()

supportsOpenStatementsAcrossRollback()

supportsOrderByUnrelated()

supportsOuterJoins()

supportsPositionedDelete()

supportsPositionedUpdate()

supportsSchemasInDataManipulation()

supportsSchemasInIndexDefinitions()

supportsSchemasInPrivilegeDefinitions()

supportsSchemasInProcedureCalls()

supportsSchemasInTableDefinitions()

supportsSelectForUpdate()

supportsStoredProcedures()

supportsSubqueriesInComparisons()

supportsSubqueriesInExists()

supportsSubqueriesInIns()

supportsSubqueriesInQuantifieds()

supportsTableCorrelationNames()

supportsTransactionIsolationLevel(int)

supportsTransactions()

supportsUnion()

supportsUnionAll()

usesLocalFilePerTable()

usesLocalFiles()

Méthodes non prises en charge

getBestRowIdentifier(String, String, String, int, boolean)

getVersionColumns(String, String, String)

Comportement spécifique à Snowflake

public ResultSet getColumnPrivileges(String, String, String, String)

Cette méthode renvoie toujours un ensemble vide car Snowflake ne prend pas en charge les privilèges au niveau des colonnes.

public ResultSet getStreams(String, String, String)
But

Cette méthode renvoie des informations sur les flux contenus dans les bases de données et les schémas spécifiés.

Arguments
  • originalCatalog : Nom de la base de données.

  • orignalSchemaPattern : modèle pour identifier le schéma (prend en charge les caractères spéciaux).

  • streamName: Nom du flux (prend en charge les caractères spéciaux).

Renvoie

Cette méthode renvoie un ResultSet contenant des lignes pour chaque flux, chaque ligne comprenant les colonnes suivantes :

  • name : nom du flux.

  • database_name : nom de la base de données pour le schéma contenant le flux.

    Un objet de base de données (par exemple, un flux) est contenu dans un schéma, qui est lui-même contenu dans une base de données.

  • schema_name : nom du schéma contenant le flux.

  • owner : rôle qui possède le flux.

  • comment : commentaires associés au flux.

  • table_name : nom de la table dont les mises à jour DML sont suivies par le flux.

  • source_type : objet source du flux. Les valeurs possibles sont les suivantes :

    • table

    • view

    • directory table

    • external table

  • base_tables : tables sous-jacentes de la vue. Cette colonne s’applique aux flux sur les vues uniquement.

  • type : type du flux. Actuellement, la fonction retourne toujours un DELTA.

  • stale : indique si le flux a été lu pour la dernière fois avant que le délai stale_after ne soit écoulé. Si TRUE, le flux peut être obsolète.

    Lorsqu’un flux est périmé, il ne peut pas être lu. Vous pouvez recréer le flux pour en reprendre la lecture. Pour éviter qu’un flux ne devienne obsolète, vous devez consommer le flux avant que le délai stale_after ne soit écoulé.

  • mode : type de flux. Les valeurs possibles sont les suivantes :

    • APPEND_ONLY : indique si le flux est un flux d’ajout uniquement.

    • INSERT_ONLY : indique que le flux ne renvoie que des informations relatives aux lignes insérées. Cette valeur s’applique uniquement aux flux sur les tables externes.

    • DEFAULT : indique que le flux est sur les tables.

Lève

Cette méthode lève une SQLException si une erreur SQL se produit.

Prise en charge des paramètres null

Certaines méthodes DatabaseMetaData acceptent des valeurs null pour les noms d’objets de base de données (par exemple, noms de table/catalogue). Par défaut, une valeur null signifie que la méthode ne filtre pas sur cet argument. Par exemple, si vous passez getColumns() une valeur null pour l’argument schemaPattern, alors getColumns() renvoie des valeurs pour tous les schémas.

Pour certaines de ces méthodes, le comportement par défaut des arguments null peut être remplacé par les paramètres suivants :

Prise en charge des caractères génériques dans les noms d’objets de base de données

Certaines méthodes DatabaseMetaData prennent en charge les caractères génériques de filtrage par motif dans les noms d’objets de base de données, tels que les noms de table/catalogue. Les caractères génériques pris en charge sont les suivants :

  • % : correspond à toute chaîne de zéro caractère ou plus.

  • _ : correspond à n’importe quel caractère.

L’exemple suivant montre ce qu’il faut passer à la méthode getColumns() pour obtenir les noms de toutes les tables et de toutes les colonnes de la base de données (TEMPORARYDB1) et du schéma (TEMPORARYSCHEMA1) spécifiés :

getColumns( connection,
    "TEMPORARYDB1",      // Database name.
    "TEMPORARYSCHEMA1",  // Schema name.
    "%",                 // All table names.
    "%"                  // All column names.
    );
Copy

Il est courant que les noms d’objets de base de données, tels que les noms de table, contiennent des traits de soulignement, par exemple SHIPPING_ADDRESSES. La recherche de SHIPPING_ADDRESSES sans isoler le trait de soulignement trouvera non seulement la table nommée SHIPPING_ADDRESSES, mais aussi des tables telles que SHIPPING2ADDRESSES. Si vous souhaitez rechercher SHIPPING_ADDRESSES mais pas SHIPPING2ADDRESSES, vous devez isoler le caractère générique pour indiquer que vous souhaitez qu’il soit traité comme un littéral. Pour isoler le caractère, faites-le précéder d’une barre oblique inverse.

La barre oblique inverse doit également être isolée si vous souhaitez l’utiliser comme caractère littéral. Par exemple, pour rechercher une table nommée T_&\ , dans laquelle le trait de soulignement, le signe esperluette et la barre oblique inverse sont des parties littérales du nom, et non des caractères génériques ou des caractères d’échappement, l’appel de méthode doit ressembler à ce qui suit :

getColumns(
    connection, "TEMPORARYDB1", "TEMPORARYSCHEMA1", "T\\_\\\\", "%" // All column names.
    );
Copy

Chaque barre oblique inverse ci-dessus doit être échappée une fois de plus, car le compilateur Java s’attend à ce que les barres obliques inverses soient échappées :

Java sees...............: T\\_\\%\\\\
SQL sees................: T\_\%\\
The actual table name is: T_%\
Copy

Objet : Driver

Le pilote fournit des méthodes qui vous permettent d’établir une connexion à la base de données et d’obtenir des informations sur le pilote lui-même.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

acceptsURL(String)

connect(String, Properties)

getMajorVersion()

getMinorVersion()

getPropertyInfo(String, Properties)

isDisableIncidents()

jdbcCompliant()

setDisableIncidents()

Comportement spécifique à Snowflake

Aucun.

Exemples

L’extrait de code suivant montre une partie d’un programme pour obtenir des informations sur les propriétés :

  // 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);
  }
Copy

Notez que dans le cas général, l’appel à cette méthode doit être à l’intérieur d’une boucle. Si vous récupérez des informations sur une propriété, puis définissez cette propriété, le nouveau paramètre peut rendre les propriétés supplémentaires pertinentes, vous devrez donc peut-être les récupérer et les définir.

Objet : ParameterMetaData

Cela fournit des informations sur les paramètres dans un PreparedStatement.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

getParameterCount()

getParameterType(int)

getParameterTypeName(int)

getPrecision(int)

getScale(int)

isNullable

Méthodes non prises en charge

getParameterClassName(int)

getParameterMode()

isSigned

Comportement spécifique à Snowflake

Aucun.

Objet : PreparedStatement

L’interface PreparedStatement décrit des méthodes permettant, par exemple, d’exécuter des requêtes.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

addBatch()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

clearParameters()

getParameterMetaData()

execute()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

executeBatch(String)

executeLargeBatch(String)

executeLargeUpdate(String)

executeQuery()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

executeUpdate()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

setBigDecimal(int, BigDecimal)

setBoolean(int, boolean)

setByte(int, byte)

setBytes(int, byte[])

setDate(int, Date)

setDouble(int, double)

setFloat(int, float)

setInt(int, int)

setLong(int, long)

setNull(int, int)

setObject(int, Object, int, int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

setObject(int, Object, int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

setObject(int, Object)

setShort(int, short)

setString(int, String)

setTime(int, Time)

setTimestamp(int, Timestamp)

Méthodes non prises en charge

setAsciiStream(int, InputStream, int)

setBinaryStream(int, InputStream, int)

setUnicodeStream(int, InputStream, int)

Comportement spécifique à Snowflake

  • addBatch()

    Pris en charge pour les instructions INSERT uniquement.

    La méthode addBatch (associée à executeBatch) permet d’insérer plusieurs lignes de données dans une seule instruction INSERT.

    La différence entre utiliser un lot et ne pas utiliser de lot est similaire à la différence entre utiliser une insertion de plusieurs lignes et une insertion à une seule ligne :

    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');
    
    Copy

    Insérer des lots de lignes est généralement plus efficace qu’insérer le même nombre de lignes dans des instructions INSERT individuelles. L’avantage est encore plus grand lorsque vous utilisez AUTOCOMMIT (c’est-à-dire lorsque chaque INSERT est une transaction individuelle).

    Pour un exemple d’utilisation de addBatch, voir Insertions par lots.

    Note

    Il existe une limite supérieure à la taille des données que vous pouvez lier ou que vous pouvez combiner dans un lot. Pour plus de détails, voir Limites de la taille du texte de requête.

  • execute()

    Cette méthode compile et exécute l’instruction SQL fournie lors de la création de l’objet PreparedStatement. L’instruction peut être n’importe quel type d’instruction SQL. La méthode execute() ne renvoie pas un ResultSet.

    Cette méthode ne renvoie rien. Si vous exécutez une requête et souhaitez obtenir un ResultSet lors de l’exécution de l’instruction, utilisez la méthode executeQuery().

  • executeQuery()

    Cette méthode compile et exécute l’instruction SQL fournie lors de la création de l’objet PreparedStatement et renvoie un ResultSet.

  • executeUpdate()

    Cette méthode compile et exécute l’instruction SQL fournie lors de la création de l’objet PreparedStatement. L’instruction doit être une instruction DML (INSERT, UPDATE, DELETE, etc.) ou une instruction SQL qui ne renvoie rien (par exemple, une instruction DDL).

    La méthode executeUpdate() renvoie un entier, qui correspond au nombre de lignes mises à jour si l’instruction était une instruction DML. Si l’instruction n’a mis à jour aucune ligne, la fonction renvoie 0.

    Si vous devez exécuter une instruction SQL renvoyant un ResultSet, utilisez une autre méthode, telle que executeQuery().

  • setObject()

    Lorsque vous liez une variable d’horodatage à une colonne d’horodatage, vous pouvez utiliser cette méthode pour spécifier la variation d’horodatage (TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ) qui doit être utilisée pour interpréter la valeur d’horodatage. Pour plus de détails, voir Liaison de variables à des colonnes d’horodatage.

Interface : SnowflakePreparedStatement

L’interface SnowflakePreparedStatement contient des méthodes spécifiques à Snowflake. Lorsque vous utilisez le pilote Snowflake JDBC pour créer un objet de type PreparedStatement, par exemple en appelant la méthode Connection.prepareStatement(), vous obtenez un objet d’un type différent (caché) spécifique à Snowflake, qui implémente l’interface JDBC PreparedStatement et l’interface SnowflakePreparedStatement. Pour accéder aux méthodes SnowflakePreparedStatement de cet objet, désencapsulez l’objet.

Méthodes supplémentaires

Les méthodes ci-dessous s’ajoutent à celles prises en charge par l’interface PreparedStatement.

Nom de la méthode

Description

executeAsyncQuery()

Exécute une requête asynchrone.

getQueryID()

Renvoie l’ID de requête Snowflake de la dernière requête exécutée de ce SnowflakePreparedStatement.

executeAsyncQuery()
But

Cette méthode effectue une requête asynchrone, ce qui implique de soumettre une instruction SQL pour exécution, puis de renvoyer le contrôle à l’appelant sans attendre la fin de la requête.

Toute instruction SQL valable pour executeQuery() l’est également pour executeAsyncQuery().

Note

Les instructions de transfert de fichiers, telles que PUT et GET, sont valides pour executeAsyncQuery() mais se comportent de manière synchrone.

Arguments

Aucun.

Renvoie

Un ResultSet « vide ». L’utilisateur doit interroger l’ensemble de résultats en appelant resultSet.unwrap(SnowflakeResultSet.class).getStatus() jusqu’à ce que les résultats de la requête deviennent disponibles.

Lève

Cette méthode peut lever une SQLException.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler l’objet PreparedStatement.

Exemples
...
PreparedStatement prepStatement = connection.prepareStatement("insert into testTable values (?)");
prepStatement.setInt(1, 33);
ResultSet rs = prepStatement.executeAsyncQuery();
...
Copy

Voir Exemples de requêtes asynchrones pour un exemple plus complet utilisant la méthode SnowflakeStatement.executeAsyncQuery() très similaire.

getQueryID()
But

Cette méthode renvoie l’ID de requête Snowflake de la dernière requête exécutée de ce SnowflakePreparedStatement. Si aucune requête n’a encore été exécutée avec cette instruction préparée, la méthode renvoie la valeur null.

Arguments

Aucun.

Renvoie

La méthode renvoie l’ID en tant que chaîne contenant un UUID.

Lève

La méthode peut lever une SQLException.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler le SnowflakePreparedStatement.

Pour les requêtes asynchrones, l’ID requête n’est pas disponible tant que l’exécution de l’instruction n’est pas terminée. Si vous appelez SnowflakePreparedStatement.getQueryID() après avoir appelé executeAsyncQuery() mais avant la fin de l’exécution de l’instruction, la valeur de retour peut être NULL. Au lieu de cela, appelez resultSet.unwrap(SnowflakeResultSet.class).getQueryID() sur l’objet ResultSet renvoyé par executeAsyncQuery().

Exemples

Cet exemple partiel montre comment appeler la méthode :

    // Retrieve the query ID from the PreparedStatement.
    String queryID;
    queryID = preparedStatement.unwrap(SnowflakePreparedStatement.class).getQueryID();
Copy

Enum : QueryStatus

Le type enum est un type spécifique à Snowflake qui :

  • Définit les constantes qui représentent le statut d’une requête asynchrone.

  • Définit les méthodes qui renvoient des détails sur les erreurs qui se sont produites lors de l’exécution des instructions SQL.

Ce type enum se trouve dans le paquet net.snowflake.client.core.

Constantes Enum

Chaque constante enum représente un statut possible différent pour la requête asynchrone.

Constante Enum

Description

RUNNING

La requête est toujours en cours d’exécution.

ABORTING

La requête est en cours d’annulation côté serveur.

SUCCESS

La requête s’est terminée avec succès.

FAILED_WITH_ERROR

La requête s’est terminée avec une erreur.

QUEUED

La requête est mise en file d’attente pour exécution (c’est-à-dire qu’elle n’est pas encore exécutée), généralement parce qu’elle attend des ressources.

DISCONNECTED

La connexion de la session est interrompue. L’état de la requête basculera bientôt sur « FAILED_WITH_ERROR ».

RESUMING_WAREHOUSE

L’entrepôt démarre et la requête n’est pas encore en cours d’exécution.

BLOCKED

L’instruction attend un verrou détenu par une autre instruction.

NO_DATA

Les données sur l’instruction ne sont pas encore disponibles, généralement parce que l’instruction n’est pas encore exécutée.

Méthodes

Le type enum définit les méthodes suivantes, que vous pouvez utiliser pour obtenir des détails sur une erreur lorsque le statut de la requête est FAILED_WITH_ERROR.

Nom de la méthode

Description

getErrorCode()

Renvoie le code d’erreur du serveur si une erreur s’est produite lors de l’exécution de la requête.

getErrorMessage()

Renvoie le message d’erreur du serveur si une erreur s’est produite lors de l’exécution de la requête.

getErrorCode()
But

Si une erreur s’est produite lors de l’exécution de la requête, cette méthode renvoie le code d’erreur du serveur.

Arguments

Aucun.

Renvoie

La méthode renvoie le code d’erreur sous la forme d’un int. Si aucune erreur ne s’est produite, la méthode renvoie la valeur 0.

Exemples
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());
}
Copy

Voir Exemples de requêtes asynchrones pour un exemple plus complet qui inclut un appel à cette méthode.

getErrorMessage()
But

Si une erreur s’est produite lors de l’exécution de la requête, cette méthode renvoie le message d’erreur du serveur.

Arguments

Aucun.

Renvoie

La méthode renvoie le message d’erreur sous la forme d’une String. Si aucune erreur ne s’est produite, la méthode renvoie la valeur No error reported.

Exemples
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());
}
Copy

Voir Exemples de requêtes asynchrones pour un exemple plus complet qui inclut un appel à cette méthode.

Objet : ResultSet

L’interface ResultSet documente les méthodes qui récupèrent les résultats des requêtes, par exemple pour lire les lignes et les colonnes renvoyées par une instruction SELECT.

Un ResultSet Snowflake est un objet en lecture seule ; il n’est pas modifiable.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

close()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

findColumn(String)

getBigDecimal(int, int)

getBigDecimal(String, int)

getBoolean(int)

getBoolean(String)

getByte(int)

getByte(String)

getBytes(int)

getBytes(String)

getDate(int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getDate(int, Calendar)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getDate(String)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getDate(String, Calendar)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getDouble(int)

getDouble(String)

getFloat(int)

getFloat(String)

getInt(int)

getInt(String)

getLong(int)

getLong(String)

getMetaData()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getObject(int)

getObject(String)

getShort(int)

getShort(String)

getString(int)

getString(String)

getTime(int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getTime(String)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getTimestamp(int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getTimestamp(String)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

next()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

wasNull()

Méthodes non prises en charge

clearWarnings()

getArray(int)

getArray(String)

getAsciiStream(int)

getAsciiStream(String)

getBinaryStream(int)

getBinaryStream(String)

getCursorName()

getUnicodeStream(int)

getUnicodeStream(String)

getWarnings()

Comportement spécifique à Snowflake

  • close()

    Ferme l’objet. Après la fermeture d’un objet, l’appel de n’importe quelle méthode de cet objet fermé lève une SQLException. L’appel de close sur un objet déjà fermé est sans danger et ne lève pas d’exception.

  • getDate(), getTime(), getTimestamp()

    Dans la version 3.12.17 et les versions ultérieures du pilote JDBC, ces méthodes utilisent le fuseau horaire de la session (spécifié par le paramètre TIMEZONE). Les versions plus anciennes utilisent le fuseau horaire du JVM.

    Pour modifier ces méthodes afin d’utiliser le fuseau horaire du JVM, réglez le paramètre JDBC_USE_SESSION_TIMEZONE sur FALSE.

  • getMetaData()

    Si l’objet ResultSet est destiné à une requête asynchrone, cette méthode se bloquera jusqu’à ce que l’exécution de la requête soit terminée. Vous pouvez utiliser resultSet.unwrap(SnowflakeResultSet.class).getStatus() pour obtenir le statut de la requête avant d’appeler cette méthode.

  • next()

    Cela fait que la ligne suivante du résultat définit la ligne « actuelle ». Les appels aux méthodes get*() , telles que getInt(), extraient des valeurs de la ligne en cours.

    Si l’objet ResultSet a été fermé par un appel à la méthode close , les appels suivants à next renverront « false », plutôt qu’une exception.

    Si l’objet ResultSet est destiné à une requête asynchrone, cette méthode se bloquera jusqu’à ce que les résultats soient disponibles. Vous pouvez utiliser resultSet.unwrap(SnowflakeResultSet.class).getStatus() pour obtenir le statut de la requête avant d’appeler cette méthode.

Interface : SnowflakeResultSet

L’interface SnowflakeResultSet contient des méthodes spécifiques à Snowflake. Lorsque vous utilisez le pilote Snowflake JDBC pour créer un objet de type ResultSet, par exemple en appelant la méthode Statement.getResultSet(), vous obtenez un objet d’un type différent (caché) spécifique à Snowflake, qui implémente l’interface JDBC ResultSet et l’interface SnowflakeResultSet. Pour accéder aux méthodes SnowflakeResultSet de cet objet, désencapsulez l’objet.

Méthodes supplémentaires

Nom de la méthode

Description

getQueryID()

Renvoie l’ID de requête Snowflake de l’instruction qui a généré ce jeu de résultats.

getStatus()

Pour un ResultSet renvoyé par une requête asynchrone, retourne le statut de la requête.

getQueryID()
But

Cette méthode renvoie l’ID de requête Snowflake de l’instruction qui a généré ce jeu de résultats.

Arguments

Aucun.

Renvoie

La méthode renvoie l’ID en tant que chaîne contenant un UUID.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler le ResultSet.

Exemples
    String queryID2;
    queryID2 = resultSet.unwrap(SnowflakeResultSet.class).getQueryID();
Copy
getStatus()
But

Pour un ResultSet renvoyé par une requête asynchrone, tel que SnowflakeStatement.executeAsyncQuery(), cette méthode renvoie le statut de la requête. Le statut indique si la requête s’est terminée avec succès, a échoué ou n’est pas encore terminée.

Arguments

Aucun.

Renvoie

Une constante enum QueryStatus.

Lève

Cette méthode peut lever une SQLException.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler l’objet ResultSet.

Exemples
QueryStatus queryStatus = resultSet.unwrap(SnowflakeResultSet.class).getStatus();
Copy

Voir Exemples de requêtes asynchrones pour un exemple plus complet qui inclut un appel à cette méthode.

Objet : ResultSetMetaData

Cela fournit des informations sur un ResultSet, par exemple, le nombre de colonnes d’un ResultSet.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

getCatalogName(int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getColumnCount()

getColumnDisplaySize(int)

getColumnLabel(int)

getColumnName(int)

getColumnType(int)

getColumnTypeName(int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getPrecision(int)

getScale(int)

getSchemaName(int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getTableName(int)

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

isAutoIncrement(int)

isCaseSensitive(int)

isCurrency(int)

isDefinitelyWritable(int)

isNullable(int)

isReadOnly(int)

isSearchable(int)

isSigned(int)

isWritable(int)

Méthodes non prises en charge

Aucun.

Comportement spécifique à Snowflake

  • La classe ResultSetMetaData n’a pas de méthode close(). Un objet ResultSetMetaData ouvert est implicitement fermé lorsque l’utilisateur ferme le ResultSet à partir duquel l’objet ResultSetMetaData a été créé.

  • getCatalogName(), getSchemaName(), getTableName()

    Si l’objet ResultSet est destiné à une requête asynchrone, ces méthodes renvoient des chaînes vides.

  • Pour les colonnes GEOGRAPHY , getColumnTypeName renvoie GEOGRAPHY.

    Notez que les méthodes getColumnType et getColumnClassName n’indiquent pas que le type de colonne est GEOGRAPHY.

Interface : SnowflakeResultSetMetaData

L’interface SnowflakeResultSetMetaData contient des méthodes spécifiques à Snowflake. Lorsque vous utilisez le pilote Snowflake JDBC pour créer un objet de type ResultSetMetaData, par exemple en appelant la méthode ResultSet.getMetaData(), vous obtenez un objet d’un type différent (caché) spécifique à Snowflake, qui implémente l’interface JDBC ResultSetMetaData et l’interface SnowflakeResultSetMetaData. Pour accéder aux méthodes SnowflakeResultSetMetaData de cet objet, désencapsulez l’objet.

Méthodes supplémentaires

Nom de la méthode

Remarques

Méthodes prises en charge

getColumnIndex(String columnName)

getColumnNames()

getInternalColumnType(int column)

getQueryID()

getColumnIndex(String columnName):
But

Renvoie l’index de la colonne qui correspond à columnName. Par exemple, si une colonne nommée « BirthDate » est la troisième colonne de la table, alors getColumnIndex(« BirthDate ») renvoie 2. (Les index sont basés sur 0 et non sur 1.)

Arguments

Le nom de la colonne pour laquelle vous voulez trouver l’index.

Renvoie

Renvoie un entier qui contient l’index de la colonne qui correspond à columnName. Si columName ne correspond à aucune colonne du jeu de résultats, cela renvoie -1.

Lève

La méthode peut lever une SQLException.

getColumnNames():
But

Cette fonction renvoie la liste de tous les noms de colonnes du jeu de résultats.

Cela diffère de la fonction getColumnName(colonne ent) dans ResultSetMetaData, qui renvoie un nom de colonne unique basé sur un index.

Arguments

Aucun.

Renvoie

Le type de données de la valeur renvoyée est « Liste<Chaîne> ». La liste contient les noms des colonnes. Les noms sont dans le même ordre que les index de colonne.

Lève

La méthode peut lever une SQLException.

getInternalColumnType(int column):
But

Cette méthode renvoie le type de données de la colonne spécifiée.

Arguments

column : indique l’index (basé sur 1) de la colonne pour laquelle vous voulez le type de données.

Renvoie

Cette méthode renvoie le type de données de la colonne spécifiée. Le type de données est un entier.

Lève

La méthode peut lever une SQLException.

getQueryID()
But

Renvoie l’ID de requête Snowflake de la requête à laquelle ces métadonnées s’appliquent.

Arguments

Aucun.

Renvoie

Cette méthode renvoie l’ID de la requête pour laquelle ces métadonnées ont été générées. L’ID de la requête est une chaîne contenant un UUID. Des informations sur les UUIDs sont incluses dans la description de la fonction SQL UUID_STRING.

Lève

La méthode peut lever une SQLException.

Objet : SnowflakeTimestampWithTimezone

Un objet SnowflakeTimestampWithTimezone fournit des informations sur le fuseau horaire associé à l’horodatage de l’objet Timestamp Java. Vous pouvez utiliser cet objet pour extraire directement le fuseau horaire au lieu d’analyser les informations à partir de la chaîne Timestamp Java. Pour accéder à cette fonctionnalité, vous devez importer les bibliothèques Java suivantes :

  • java.sql.Timestamp;

  • java.time.ZonedDateTime;

  • java.util.TimeZone;

Méthodes

Nom de la méthode

Remarques

Constructeurs

SnowflakeTimestampWithTimezone(
    long seconds,
    int nanoseconds,
    TimeZone tz)
Copy
  • Nombre de secondes depuis le 1er janvier 1970 (heure Internet).

  • Nombre de nanosecondes fractionnées.

  • ID du fuseau horaire.

SnowflakeTimestampWithTimezone(
    Timestamp ts,
    TimeZone tz)
Copy
  • Objet Timestamp représentant l’heure souhaitée.

  • ID du fuseau horaire.

SnowflakeTimestampWithTimezone(
    Timestamp ts)
Copy
  • Objet Timestamp représentant l’heure souhaitée.

Méthodes prises en charge

getTimezone()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

toZonedDateTime()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

Comportement spécifique à Snowflake

  • getTimezone()

    Renvoie le fuseau horaire à partir de l’horodatage.

    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);
    }
    
    Copy
  • toZonedDateTime()

    Convertit un horodatage SnowflakeTimestampWithTimezone en une date-heure zonée (objet ZonedDateTime Java).

    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);
    }
    
    Copy

Objet : Statement

Un objet Statement représente une instruction SQL. L’objet d’instruction permet aux utilisateurs d’effectuer des tâches telles que :

  • Exécuter une instruction SQL.

  • Définir un délai d’expiration pour l’exécution de l’instruction.

  • Récupérer un jeu de résultats pour une requête.

Méthodes

Nom de la méthode

Remarques

Méthodes prises en charge

cancel()

close()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

execute(String)

executeBatch(String)

executeLargeBatch(String)

executeLargeUpdate(String)

executeQuery(String)

executeUpdate(String)

getBatchQueryID()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

getMaxFieldSize()

getMaxRows()

getMoreResults()

getQueryTimeout()

getResultSet()

getUpdateCount()

Comportement spécifique à Snowflake (voir ci-dessous pour plus de détails).

setCursorName(String)

setMaxRows(int)

setQueryTimeout(int)

Méthodes non prises en charge

clearWarnings()

getWarnings()

setEscapeProcessing(boolean)

setMaxFieldSize(int)

Comportement spécifique à Snowflake

  • close()

    Cette méthode ferme l’objet. Après la fermeture d’un objet, l’appel de n’importe quelle méthode de cet objet fermé lève une SQLException. L’appel de close sur un objet déjà fermé est sans danger et ne lève pas d’exception.

  • getBatchQueryID()

    Cette méthode renvoie une liste d’IDs de requêtes Snowflake du dernier lot de requêtes exécuté de cette Statement. Si aucune requête n’a encore été exécutée avec l’instruction, la méthode renvoie la valeur null.

    Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler l’instruction. Par exemple :

        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);
          }
        }
    
    Copy
  • getUpdateCount()

    Cette méthode renvoie le nombre de lignes mises à jour par la dernière instruction SQL exécutée.

    • Si l’instruction était une instruction DML (INSERT, UPDATE, DELETE, etc.), alors getUpdateCount() renvoie le nombre de lignes ajoutées, supprimées ou modifiées. Notez que cette valeur peut être 0 si aucune ligne n’a été modifiée.

    • Si l’instruction était une instruction SELECT, alors getUpdateCount() renvoie -1.

    • Si l’instruction était une instruction DDL, alors getUpdateCount() renvoie -1.

Interface : SnowflakeStatement

L’interface SnowflakeStatement contient des méthodes spécifiques à Snowflake. Lorsque vous utilisez le pilote Snowflake JDBC pour créer un objet de type Instruction, par exemple en appelant la méthode Connection.createStatement(), vous obtenez un objet d’un type différent (caché) spécifique à Snowflake, qui implémente l’interface d’instruction JDBC et l’interface SnowflakeStatement. Pour accéder aux méthodes SnowflakeStatement de cet objet, désencapsulez l’objet.

Méthodes supplémentaires

Nom de la méthode

Description

executeAsyncQuery()

Exécute une requête asynchrone.

getQueryID()

Renvoie l’ID de requête Snowflake de la dernière requête exécutée de ce Statement.

setParameter(String, Value)

Définit les paramètres spécifiques à Snowflake.

executeAsyncQuery(String)
But

Cette méthode effectue une requête asynchrone, ce qui implique de soumettre une instruction SQL pour exécution, puis de renvoyer le contrôle à l’appelant sans attendre la fin de la requête.

Arguments

Une chaîne contenant la commande SQL à exécuter. Toute instruction SQL valable pour executeQuery() l’est également pour executeAsyncQuery().

Note

Les instructions de transfert de fichiers, telles que PUT et GET, sont valides pour executeAsyncQuery() mais se comportent de manière synchrone.

Renvoie

Un ResultSet « vide ». L’utilisateur doit interroger l’ensemble de résultats en appelant resultSet.unwrap(SnowflakeResultSet.class).getStatus() jusqu’à ce que les résultats de la requête deviennent disponibles.

Lève

La méthode peut lever une SQLException.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler l’objet d’instruction.

Exemples

Voir Exemples de requêtes asynchrones pour un exemple qui inclut un appel à cette méthode.

getQueryID()
But

Cette méthode renvoie l’ID de requête Snowflake de la dernière requête exécutée de ce Statement.

Arguments

Aucun.

Renvoie

L’ID de la dernière requête exécutée de cette instruction. L’ID de la requête est une chaîne contenant un UUID. Si aucune requête n’a encore été exécutée avec l’instruction, la méthode renvoie la valeur null.

Lève

La méthode peut lever une SQLException.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler l’instruction.

Pour les requêtes asynchrones, l’ID requête n’est pas disponible tant que l’exécution de l’instruction n’est pas terminée. Si vous appelez SnowflakeStatement.getQueryID() après avoir appelé executeAsyncQuery() mais avant la fin de l’exécution de l’instruction, la valeur de retour peut être NULL. Au lieu de cela, appelez resultSet.unwrap(SnowflakeResultSet.class).getQueryID() sur l’objet ResultSet renvoyé par executeAsyncQuery().

Exemples
    String queryID1;
    queryID1 = statement.unwrap(SnowflakeStatement.class).getQueryID();
Copy
setParameter(String parameter_name, <type> <value>)
But

La classe SnowflakeStatement fournit la méthode setParameter en tant qu’extension Snowflake. Cela permet à l’appelant de définir des paramètres JDBC spécifiques à Snowflake.

La méthode est surchargée. Des paramètres JDBC différents nécessitent des types de données différents. Il existe une méthode pour chaque type de données valide pouvant être transmis en tant que deuxième argument à la fonction.

Arguments
parameter_name :

Cette chaîne doit contenir le nom d’un paramètre JDBC Snowflake prédéfini. Les paramètres JDBC prédéfinis (ainsi que leurs valeurs ou plages valides) sont répertoriés ci-dessous :

Paramètre JDBC

Remarques

MULTI_STATEMENT_COUNT

Entier spécifiant le nombre d’instructions (0 = nombre illimité d’instructions ; 1 ou supérieur indique le nombre exact d’instructions à exécuter).

value :

Il s’agit de la valeur à affecter au paramètre JDBC spécifié. Assurez-vous que le type de données est compatible avec le paramètre JDBC que vous avez spécifié.

Renvoie

Rien.

Lève

Cette fonction peut lever une SQLException.

Remarques

Cette méthode est une extension Snowflake à la norme JDBC. Pour utiliser cette méthode, vous devez désencapsuler l’instruction.

Exemples
Statement statement1;
...
// Tell Statement to expect to execute 2 statements:
statement1.unwrap(SnowflakeStatement.class).setParameter(
        "MULTI_STATEMENT_COUNT", 2);
Copy

Interface : SQLException

Les objets SQLException sont levés par les méthodes de pilote JDBC lorsqu’une erreur se produit et contiennent des informations sur cette erreur.

Nom de la méthode

Description

getErrorCode()

Renvoie un code d’erreur spécifique à Snowflake.

getMessage()

Cela renvoie une chaîne qui décrit l’erreur.

getSQLState()

Renvoie le SQLState.

getErrorCode()
But

Cette méthode renvoie un code d’erreur Snowflake personnalisé.

Arguments

Aucun.

Renvoie

Code d’erreur spécifique à Snowflake.

Remarques

Voir aussi la méthode getSQLState().

getMessage()
But

Cette méthode renvoie une chaîne qui décrit l’erreur.

Arguments

Aucun.

Renvoie

Message d’erreur spécifique à Snowflake.

getSQLState()
But

Cette méthode renvoie une chaîne qui contient une valeur alphanumérique de cinq caractères basée sur l’erreur.

Arguments

Aucun.

Renvoie

SQLState spécifique à Snowflake. Un SQLState est une chaîne alphanumérique de cinq caractères qui indique l’erreur spécifique qui s’est produite.