JDBC ドライバー API サポート

Snowflake JDBC ドライバーは、 JDBC タイプ4のドライバーで、 JDBC APIのバージョン1.0のコア JDBC 機能をサポートしています。完全な API リファレンスについては、 Java SE Technologiesのドキュメント をご参照ください。 APIのそれ以降のバージョンのメソッドを試すことはできますが、Snowflakeはこれらのメソッドがサポートされていることを保証しません。

Snowflake JDBC ドライバーにはJava 1.8(またはそれ以上)が必要です。このドライバーには、JavaのStandard Edition(SE)およびEnterprise Edition(EE)に含まれている java.sql パッケージが必要です。2019年8月の時点では、 java.sql パッケージのドキュメントはhttps://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.htmlから入手できます。

このドライバーは、データベースサーバーへの接続用に JDBC をサポートするほとんどのクライアントツール/アプリケーションで使用できます。

このトピックでは、 JDBC API全体については説明しません。代わりに、次のトピックをご参照ください。

  • JDBC API からサポートされているインターフェイスと、各インターフェイス内でサポートされているメソッドのリスト。

  • Snowflakeが JDBC API 標準を拡張することについてのドキュメント。

  • JDBC API標準があいまいで、Snowflakeの実装が他のシステムと異なる動作をする可能性についてのドキュメント。

一般に、メソッドが呼び出されて失敗した場合、メソッドは例外(例: SQLException)を発生させます。

サポートされる JDBC インターフェイスはアルファベット順にリストされ、対応するSnowflake拡張クラスとペアになっています(該当する場合)。

このトピックの内容:

オブジェクト: CallableStatement

CallableStatement は、ストアドプロシージャの実行に使用されます。

メソッド

メソッド名

メモ

サポートされているメソッド

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()

サポートされていないメソッド

なし。

Snowflake固有の動作

なし。

インターフェイス: SnowflakeCallableStatement

SnowflakeCallableStatement インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えばConnection.prepareCall()メソッドを呼び出して、タイプ CallableStatementのオブジェクトを作成すると、実際には、 JDBC CallableStatement インターフェイスと SnowflakeCallableStatement インターフェイスの両方を実装する、別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakeCallableStatement メソッドにアクセスするには、オブジェクトを ラップ解除 します。

追加メソッド

メソッド名

説明

getQueryID()

この CallableStatement で最後に実行されたクエリのSnowflakeクエリ ID を返します。

getQueryID()
目的

このメソッドは、この CallableStatement で最後に実行されたクエリのSnowflakeクエリ ID を返します。呼び出し可能なステートメントでクエリがまだ実行されていない場合、メソッドはnullを返します。

引数

なし。

戻り値

このメソッドは、 UUIDを含むストリングとして ID を返します。 UUIDs に関する情報は、 SQL 関数 UUID_STRING の説明に含まれています。

スロー

メソッドは SQLException をスローできます。

オブジェクト: Connection

Connection オブジェクトは、データベースサーバーへの接続を表します。接続オブジェクトを使用すると、ユーザーは特定のデータベースサーバーに接続するだけでなく、 SQL ステートメントの実行に使用できる Statement オブジェクトを作成することもできます。

メソッド

メソッド名

メモ

サポートされているメソッド

abort()

clearWarnings()

close()

Snowflake固有の動作(以下を参照)。

commit()

createStatement()

createStatement(int, int)

createStatement(int, int, int)

getAutoCommit()

getCatalog()

getClientInfo()

getHoldability()

getMetaData()

Snowflake固有の動作(以下を参照)。

getSchema()

getTransactionIsolation()

getTypeMap()

getWarnings()

isClosed()

isReadOnly()

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)

Snowflake固有の動作(以下を参照)

prepareStatement(String, boolean)

setAutoCommit(boolean)

setCatalog(String)

setClientInfo(String, String)

このメソッドを呼び出すと、 SQLClientInfoException が発生します。

setClientInfo(Properties)

このメソッドを呼び出すと、 SQLClientInfoException が発生します。

setSchema(String)

サポートされていないメソッド

rollback()

setReadOnly(boolean)

setTransactionIsolation(int)

Snowflake固有の動作

  • close()

    オブジェクトを閉じます。オブジェクトが閉じられた後、閉じられたオブジェクトのほとんどすべてのメソッドを呼び出すと、 SQLException が発生します。既に閉じられているオブジェクトで close を呼び出しても問題はなく、例外は発生しません。

  • getMetaData()

    JDBC ドライバーとSnowflakeに関するメタデータを取得できます。たとえば、トランザクションがサポートされているかどうかを確認できます。

    戻り値で呼び出すことができるメソッドの詳細については、 オブジェクト: DatabaseMetaData をご参照ください。

  • prepareStatement(String sql)

    このメソッドは、 SQL ステートメントの実行に使用できる preparedStatement オブジェクトを返します。 preparedStatement オブジェクトの execute() メソッドを呼び出して、ステートメントを実行できます。ステートメントはそのまま実行することも、値をステートメントにバインドした後に実行することもできます。

    注釈

    一部のシステムでは、ステートメントが準備された後、そのステートメントは、ステートメントを再コンパイルせずに繰り返し実行できます。一度準備して繰り返し実行すると、時間とリソースを少し節約できます。

    Snowflakeでは、prepareStatement()は実際にコードをコンパイルしません。代わりに、 PreparedStatement.execute()PreparedStatement.executeQuery()、および PreparedStatement.executeUpdate() がステートメントをコンパイルして実行します。したがって、実行前にステートメントを準備しても、 Statement.execute() を使用する場合と比べてリソースは節約されません。

  • prepareCall(String sql)

  • prepareCall(String sql, boolean)

  • prepareCall(String sql, int, int)

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

    ほとんどの JDBC 実装のように、 prepareCall メソッドを使用してパラメーターをストアドプロシージャにバインドできます。たとえば、次はサポートされています。

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

    ただし、Snowflake JDBC ドライバーでは、 prepareCall メソッドは ? = 構文をサポートしておらず、ストアドプロシージャの 戻り値 のバインドをサポートしていません。たとえば、次のコマンドは サポートされていません

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

インターフェイス: SnowflakeConnection

SnowflakeConnection インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えば DriverManager.getConnection()メソッドを呼び出してConnectionタイプのオブジェクトを作成すると、実際には、 JDBC 接続インターフェイスと SnowflakeConnection インターフェイスの両方を実装する別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakeConnection メソッドにアクセスするには、オブジェクトを ラップ解除 します。

追加メソッド

これらのメソッドは、 JDBC Connection インターフェイスでサポートされるメソッドに追加されます。

メソッド名

説明

createResultSet(String)

非同期で起動された SQL ステートメントのクエリ ID を指定すると、クエリ結果を取得して ResultSet オブジェクト内に返します。

downloadStream(String, String, boolean)

指定されたステージからファイルをダウンロードし、 InputStreamを返します。

getSessionID()

現在のセッションのセッション ID を取得します。

prepareStatement(String, Boolean)

オーバーロードされた prepareStatement() メソッド(詳細は以下を参照)。

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

ストリームからデータを圧縮し、ステージの場所にアップロードします。

public ResultSet createResultSet(String queryID)
目的

非同期で起動された SQL ステートメント の queryID を指定すると、クエリ結果を取得して ResultSet オブジェクト内に返します。

このメソッドは通常、 SQL ステートメントが終了してから最大24時間まで呼び出すことができます。

引数

queryID :結果が必要なクエリのクエリ ID。

戻り値

ResultSet。クエリの実行がまだ完了していない場合、サーバーは「空」の ResultSet を返します。ユーザーは resultSet.unwrap(SnowflakeResultSet.class).getStatus() を呼び出して、データが利用可能になる時期を確認できます。

スロー

このメソッドは SQLException をスローできます。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、接続オブジェクトを ラップ解除 する必要があります。

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

このメソッドの呼び出しを含むより広範な例については、 非同期クエリの例 をご参照ください。

public InputStream downloadStream(String stageName, String sourceFileName, boolean decompress)
目的

このメソッドは、指定されたステージからファイルをダウンロードし、入力ストリームを返します。

引数

stageName:ステージ名。

sourceFileName :ステージ内のファイルパス。

解凍:ファイルが圧縮されている場合はTrue。

戻り値

このメソッドは InputStream を返します。

スロー

SQL エラーが発生した場合、このメソッドは SQLException をスローします。

部分的な例については、 内部ステージからストリームにデータファイルを直接ダウンロードする をご参照ください。

public String getSessionID()
目的

このメソッドは、現在のセッションのセッション ID を返します。

引数

なし

戻り値

セッション ID を文字列として返します。

スロー

このメソッドは、接続が閉じられた場合など、 SQL エラーが発生した場合に SQLException をスローします。

使用上の注意

接続が開いている間はセッション ID は変更されないため、セッション ID はパフォーマンスを向上させるために(毎回サーバーから取得するのではなく)ローカルにキャッシュされます。

public prepareStatement(String sql, Boolean skipParsing)

このメソッドは非推奨です。skipParsingパラメーターは、メソッドの動作に影響しなくなりました。このメソッドは、skipParsingパラメーターの設定に関係なく、 prepareStatement(String sql) メソッドと同じように動作します。

新しいコードはメソッド prepareStatement(String sql) を使用する必要があります。

可能な場合は、このメソッドの2引数バージョンを使用する既存のコードを更新して、1引数メソッド prepareStatement(String sql) を使用する必要があります。

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

このメソッドは、ストリームからデータを圧縮し、ステージの場所にアップロードします。データは1つのファイルとしてアップロードされます。このメソッドでは分割は行われません。

引数

stageName:ステージ名(例: ~ 、テーブル名、またはステージ名)。

destPrefix:ステージでデータをアップロードするパス/プレフィックス。

inputStream:データのアップロード元の入力ストリーム。

destFileName :使用する宛先ファイル名。

compressData:ストリームをアップロードする前のデータ圧縮の有無。

戻り値

なし。

スロー

このメソッドは、ステージでストリームからのデータの圧縮と書き込みに失敗した場合、 java.sql.SQLException をスローします。

メモ

呼び出し元は、メソッドが呼び出された後に inputStream を解放する責任があります。

部分的な例については、 データファイルをストリームから内部ステージに直接アップロードする をご参照ください。

オブジェクト: DatabaseMetaData

DatabaseMetaData クラスは、データベースサーバー(この場合はSnowflake)がサポートする機能に関する情報を提供します。

メソッド

メソッド名

メモ

サポートされているメソッド

allProceduresAreCallable()

allTablesAreSelectable()

dataDefinitionCausesTransactionCommit()

dataDefinitionIgnoredInTransactions()

doesMaxRowSizeIncludeBlobs()

getCatalogs()

getCatalogSeparator()

getCatalogTerm()

getColumnPrivileges(String, String, String, String)

columnNamePattern 引数に対する ワイルドカード をサポートします。 catalogschemaPatterntableNamePattern、および columnNamePattern 引数に対する null をサポートします。このメソッドの詳細については、 Snowflake固有の動作 をご参照ください。

getColumns(String, String, String, String)

schemaPatterntableNamePattern、および columnNamePattern 引数に対する ワイルドカード をサポートします。 catalogschemaPatterntableNamePattern、および columnNamePattern 引数に対する null をサポートします。

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

parentCatalogparentSchemaparentTableforeignCatalogforeignSchema、および foreignTable 引数に対する null をサポートします。

getDatabaseProductName()

getDatabaseProductVersion()

getDefaultTransactionIsolation()

getDriverMajorVersion()

getDriverMinorVersion()

getDriverName()

getDriverVersion()

getExportedKeys(String, String, String)

catalogschema、および table 引数に対する null をサポートします。

getExtraNameCharacters()

getFunctionColumns()

schemaPatternfunctionNamePattern、および columnNamePattern 引数に対する ワイルドカード をサポートします。 columnNamePattern 引数に対する null をサポートします。

getIdentifierQuoteString()

getImportedKeys(String, String, String)

catalogschema、および table 引数に対する null をサポートします。

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)

catalogschema、および table 引数に対する null をサポートします。

getProcedureColumns(String, String, String, String)

schemaPatternprocedureNamePattern、および columnNamePattern 引数に対する ワイルドカード をサポートします。 columnNamePattern 引数に対する null をサポートします。

getProcedures(String, String, String)

schemaPattern および procedureNamePattern 引数に対する ワイルドカード をサポートします。 columnNamePattern 引数に対する null をサポートします。

getProcedureTerm()

getSchemas()

getSchemas(String, String)

schemaPattern 引数に対する ワイルドカード をサポートします。 catalogName および schemaPattern 引数に対する null をサポートします。

getSchemaTerm()

getSearchStringEscape()

getSQLKeywords()

getStringFunctions()

getSystemFunctions()

getTablePrivileges(String, String, String)

schemaPattern および tableNamePattern 引数に対する ワイルドカード をサポートします。 catalog および schemaPattern 引数に対する null をサポートします。

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

schemaPattern および tableNamePattern 引数に対する ワイルドカード をサポートします。 catalogschemaPatterntableNamePattern、および types 引数に対する null をサポートします。

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()

サポートされていないメソッド

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

getVersionColumns(String, String, String)

Snowflake固有の動作

getColumnPrivileges(String, String, String, String)

Snowflakeは列レベルの権限をサポートしていないため、このメソッドは常に空のセットを返します。

nullパラメーターのサポート

一部の DatabaseMetaData メソッドは、データベースオブジェクト名(例:テーブル/カタログ名)の null 値を受け入れます。デフォルトでは、 null 値は、メソッドがその引数でフィルタリングしないことを意味します。たとえば、 getColumns()schemaPattern 引数の null 値を渡すと、 getColumns() はすべてのスキーマの値を返します。

これらのメソッドの一部では、 null 引数のデフォルトの動作を次の パラメーター で上書きできます。

データベースオブジェクト名でのワイルドカードのサポート

一部の DatabaseMetaData メソッドは、テーブル/カタログ名といった、データベースオブジェクト名のパターンマッチングワイルドカードをサポートしています。サポートされるワイルドカード文字は次のとおりです。

  • % :0個以上の文字の任意の文字列に一致します。

  • _ :任意の1文字に一致します。

次の例は、指定されたデータベース(TEMPORARYDB1)とスキーマ(TEMPORARYSCHEMA1)のすべてのテーブルとすべての列の名前を取得するために getColumns() メソッドに渡すものを示しています。

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

テーブル名などのデータベースオブジェクト名には、アンダースコアを含めるのが一般的です(例: SHIPPING_ADDRESSES)。アンダースコアをエスケープせずに SHIPPING_ADDRESSES を検索すると、 SHIPPING_ADDRESSES という名前のテーブルだけでなく、 SHIPPING2ADDRESSES などのテーブルも見つかります。 SHIPPING2ADDRESSES ではなく SHIPPING_ADDRESSES を検索する場合は、ワイルドカード文字をエスケープして、リテラルとして処理することを示す必要があります。文字をエスケープするには、その前にバックスラッシュを付けます。

リテラル文字として使用する場合は、バックスラッシュ文字自体もエスケープする必要があります。たとえば、アンダースコア、アンパサンド文字、バックスラッシュがワイルドカード文字やエスケープ文字ではなく、名前のリテラル部分である T_&\ という名前のテーブルを検索するには、メソッド呼び出しは次のようになります。

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

Javaコンパイラはバックスラッシュによるエスケープを想定しているため、上記の各バックスラッシュに追加してエスケープする必要があります。

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

オブジェクト: Driver

ドライバーは、データベースへの接続を取得し、ドライバー自体に関する情報を取得できるメソッドを提供します。

メソッド

メソッド名

メモ

サポートされているメソッド

acceptsURL(String)

connect(String, Properties)

getMajorVersion()

getMinorVersion()

getPropertyInfo(String, Properties)

isDisableIncidents()

jdbcCompliant()

setDisableIncidents()

Snowflake固有の動作

なし。

次のコードスニペットは、プロパティ情報を取得するプログラムの一部を示しています。

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

一般的なケースでは、このメソッドの呼び出しはループ内にある必要があることに注意してください。プロパティに関する情報を取得してからそのプロパティを設定すると、新しい設定によって追加のプロパティが関連するようになる可能性があるため、それらを取得して設定する必要がある場合があります。

オブジェクト: ParameterMetaData

これは、 PreparedStatementのパラメーターに関する情報を提供します。

メソッド

メソッド名

メモ

サポートされているメソッド

getParameterCount()

getParameterType(int)

getParameterTypeName(int)

getPrecision(int)

getScale(int)

isNullable

サポートされていないメソッド

getParameterClassName(int)

getParameterMode()

isSigned

Snowflake固有の動作

なし。

オブジェクト: PreparedStatement

PreparedStatement インターフェイスは、たとえばクエリを実行できるメソッドを記述します。

メソッド

メソッド名

メモ

サポートされているメソッド

addBatch()

Snowflake固有の動作(詳細は以下を参照)。

clearParameters()

getParameterMetaData()

execute()

Snowflake固有の動作(詳細は以下を参照)。

executeQuery()

Snowflake固有の動作(詳細は以下を参照)。

executeUpdate()

Snowflake固有の動作(詳細は以下を参照)。

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)

setObject(int, Object, int)

setObject(int, Object)

setShort(int, short)

setString(int, String)

setTime(int, Time)

setTimestamp(int, Timestamp)

サポートされていないメソッド

setAsciiStream(int, InputStream, int)

setBinaryStream(int, InputStream, int)

setUnicodeStream(int, InputStream, int)

Snowflake固有の動作

  • addBatch()

    INSERT ステートメントのみでサポートされます。

    addBatch メソッド( executeBatch と組み合わせて)を使用すると、複数のデータ行を単一の INSERT ステートメントの一部として挿入できます。

    バッチを使用する場合と使用しない場合の違いは、複数行挿入を使用する場合と単一行挿入を使用する場合の違いに似ています。

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

    通常、行のバッチを挿入する方が、個々の INSERT ステートメントに同じ数の行を挿入するよりも効率的です。 AUTOCOMMIT を使用する場合(つまり、各 INSERT が個別のトランザクションである場合)には、さらに大きな利点があります。

    addBatch の使用例については、 バッチ挿入 をご参照ください。

    注釈

    バインドできるデータのサイズ、またはバッチで結合できるデータのサイズには上限があります。詳細については、 クエリテキストサイズの制限 をご参照ください。

  • execute()

    このメソッドは、 PreparedStatement オブジェクトの作成時に提供された SQL ステートメントをコンパイルして実行します。ステートメントは、任意のタイプの SQL ステートメントにできます。 execute() メソッドは ResultSet を返しません。

    このメソッドは何も返しません。クエリを実行していて、ステートメントの実行時に ResultSet を取得する必要がある場合は、 executeQuery() メソッドを使用します。

  • executeQuery()

    このメソッドは、 PreparedStatement オブジェクトの作成時に提供された SQL ステートメントをコンパイルおよび実行し、 ResultSet を返します。

  • executeUpdate()

    このメソッドは、 PreparedStatement オブジェクトの作成時に提供された SQL ステートメントをコンパイルして実行します。ステートメントは、 DML ステートメント(INSERT、 UPDATE、 DELETEなど)または何も返さない SQL ステートメント( DDL ステートメントなど)でなければなりません。

    executeUpdate() メソッドは整数を返します。これは、ステートメントが DML ステートメントであった場合に更新される行の数です。ステートメントが行を更新しなかった場合、関数は 0 を返します。

    ResultSetを返す SQL ステートメントを実行する必要がある場合は、executeQuery()などの別のメソッドを使用します。

インターフェイス: SnowflakePreparedStatement

SnowflakePreparedStatement インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えばConnection.prepareStatement()メソッドを呼び出して、タイプ PreparedStatementのオブジェクトを作成すると、実際には、 JDBC PreparedStatement インターフェイスと SnowflakePreparedStatement インターフェイスの両方を実装する別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakePreparedStatement メソッドにアクセスするには、オブジェクトを ラップ解除 します。

追加メソッド

以下のメソッドは、 PreparedStatement インターフェイスでサポートされているメソッドに追加されています。

メソッド名

説明

executeAsyncQuery()

非同期クエリを実行します。

getQueryID()

この SnowflakePreparedStatement の最後に実行されたクエリのSnowflakeクエリ ID を返します。

executeAsyncQuery()
目的

このメソッドは、 非同期クエリ を実行します。これにより、実行のために SQL ステートメントを送信し、クエリが完了するのを待たずに呼び出し元に制御を返します。

executeQuery() に有効なすべての SQL ステートメントは、 executeAsyncQuery() にも有効です。

注釈

PUT や GET などのファイル転送ステートメントは executeAsyncQuery() に対して有効ですが、同期的に動作します。

引数

なし。

戻り値

「空」の ResultSet。ユーザーは、クエリ結果が利用可能になるまで resultSet.unwrap(SnowflakeResultSet.class).getStatus() を呼び出して、結果セットをポーリングする必要があります。

スロー

このメソッドは SQLException をスローできます。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、 PreparedStatement オブジェクトを ラップ解除 する必要があります。

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

非常によく似た SnowflakeStatement.executeAsyncQuery() メソッドを使用した、より広範な例については 非同期クエリの例 をご参照ください。

getQueryID()
目的

このメソッドは、この SnowflakePreparedStatement で最後に実行されたクエリのSnowflakeクエリ ID を返します。この準備済みステートメントでクエリがまだ実行されていない場合、メソッドはnullを返します。

引数

なし。

戻り値

このメソッドは、 UUIDを含むストリングとして ID を返します。

スロー

メソッドは SQLException をスローできます。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。この方法を使用するには、 SnowflakePreparedStatementラップ解除 する必要があります。

非同期クエリ の場合、クエリの実行が完了するまでクエリ ID は利用できません。 executeAsyncQuery() を呼び出した後、ステートメントの実行が完了する前に SnowflakePreparedStatement.getQueryID() を呼び出すと、戻り値が NULL になる可能性があります。代わりに、 executeAsyncQuery() から返された ResultSet オブジェクトで resultSet.unwrap(SnowflakeResultSet.class).getQueryID() を呼び出します。

この部分的な例は、メソッドを呼び出す方法を示しています。

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

列挙型: QueryStatus

列挙型は、次を実行するSnowflake固有の型です。

  • 非同期クエリ のステータスを表す定数を定義します。

  • SQL ステートメントの実行時に発生したエラーに関する詳細を返すメソッドを定義します。

この列挙型は net.snowflake.client.core パッケージに含まれています。

列挙型定数

各列挙型定数は、非同期クエリのさまざまな可能ステータスを表します。

列挙型定数

説明

RUNNING

クエリはまだ実行中です。

ABORTING

クエリはサーバー側で中止されています。

SUCCESS

クエリは正常に終了しました。

FAILED_WITH_ERROR

クエリに失敗しました。

QUEUED

クエリは、通常、リソースを待機しているため、実行のキューに入れられています(つまり、まだ実行が開始されていません)。

DISCONNECTED

セッションの接続が切断されています。クエリの状態は間もなく「FAILED_WITH_ERROR」に変わります。

RESUMING_WAREHOUSE

ウェアハウスが起動しており、クエリはまだ実行されていません。

BLOCKED

ステートメントは、別のステートメントによって保持されているロックを待機しています。

NO_DATA

通常、ステートメントがまだ実行を開始していないため、ステートメントに関するデータはまだ利用できません。

メソッド

列挙型は次のメソッドを定義します。これらのメソッドを使用して、クエリステータスが FAILED_WITH_ERROR のときにエラーの詳細を取得できます。

メソッド名

説明

getErrorCode()

クエリの実行中にエラーが発生した場合は、サーバーからエラーコードを返します。

getErrorMessage()

クエリの実行中にエラーが発生した場合は、サーバーからエラーメッセージを返します。

getErrorCode()
目的

クエリの実行中にエラーが発生した場合、このメソッドはサーバーからエラーコードを返します。

引数

なし。

戻り値

メソッドは、エラーコードを int として返します。エラーが発生しなかった場合、メソッドは値 0 を返します。

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

このメソッドの呼び出しを含むより広範な例については、 非同期クエリの例 をご参照ください。

getErrorMessage()
目的

クエリの実行中にエラーが発生した場合、このメソッドはサーバーからエラーメッセージを返します。

引数

なし。

戻り値

メソッドは、エラーメッセージを String として返します。エラーが発生しなかった場合、メソッドは値 No error reported を返します。

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

このメソッドの呼び出しを含むより広範な例については、 非同期クエリの例 をご参照ください。

オブジェクト: ResultSet

ResultSet インターフェイスは、クエリの結果を取得するメソッドを文書化します。たとえば、SELECT ステートメントによって返された行と列を読み取ります。

Snowflake ResultSet は読み取り専用オブジェクトです。更新できません。

メソッド

メソッド名

メモ

サポートされているメソッド

close()

Snowflake固有の動作(詳細は以下を参照)。

findColumn(String)

getBigDecimal(int, int)

getBigDecimal(String, int)

getBoolean(int)

getBoolean(String)

getByte(int)

getByte(String)

getBytes(int)

getBytes(String)

getDate(int)

getDate(String)

getDouble(int)

getDouble(String)

getFloat(int)

getFloat(String)

getInt(int)

getInt(String)

getLong(int)

getLong(String)

getMetaData()

Snowflake固有の動作(詳細は以下を参照)。

getObject(int)

getObject(String)

getShort(int)

getShort(String)

getString(int)

getString(String)

getTime(int)

getTime(String)

getTimestamp(int)

getTimestamp(String)

next()

Snowflake固有の動作(詳細は以下を参照)。

wasNull()

サポートされていないメソッド

clearWarnings()

getAsciiStream(int)

getAsciiStream(String)

getBinaryStream(int)

getBinaryStream(String)

getCursorName()

getUnicodeStream(int)

getUnicodeStream(String)

getWarnings()

Snowflake固有の動作

  • close()

    オブジェクトを閉じます。オブジェクトが閉じられた後、閉じられたオブジェクトのほとんどすべてのメソッドを呼び出すと、 SQLException が発生します。既に閉じられているオブジェクトで close を呼び出しても問題はなく、例外は発生しません。

  • getMetaData()

    ResultSet オブジェクトが 非同期クエリ 用である場合、このメソッドは、クエリの実行が完了するまでブロックされます。このメソッドを呼び出す前に、 resultSet.unwrap(SnowflakeResultSet.class).getStatus() を使用してクエリのステータスを取得できます。

  • next()

    これにより、結果セットの次の行が「現在の」行になります。 getInt() などの get*() メソッドの呼び出しは、現在の行から値を取得します。

    close メソッドの呼び出しによって ResultSet が閉じられた場合、その後の next の呼び出しは、例外を発生させるのではなく、falseを返します。

    ResultSet オブジェクトが 非同期クエリ 用である場合、このメソッドは、結果が利用可能になるまでブロックします。このメソッドを呼び出す前に、 resultSet.unwrap(SnowflakeResultSet.class).getStatus() を使用してクエリのステータスを取得できます。

インターフェイス: SnowflakeResultSet

SnowflakeResultSet インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えばStatement.getResultSet()メソッドを呼び出して、タイプ ResultSetのオブジェクトを作成すると、実際には、 JDBC ResultSet インターフェイスと SnowflakeResultSet インターフェイスの両方を実装する別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakeResultSet メソッドにアクセスするには、オブジェクトを ラップ解除 します。

追加メソッド

メソッド名

説明

getQueryID()

この結果セットを生成したステートメントのSnowflakeクエリ ID を返します。

getStatus()

非同期クエリによって返された ResultSet に対して、クエリのステータスを返します。

getQueryID()
目的

このメソッドは、この結果セットを生成したステートメントのSnowflakeクエリ ID を返します。

引数

なし。

戻り値

このメソッドは、 UUIDを含むストリングとして ID を返します。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。この方法を使用するには、 ResultSetラップ解除 する必要があります。

    String queryID2;
    queryID2 = resultSet.unwrap(SnowflakeResultSet.class).getQueryID();
getStatus()
目的

SnowflakeStatement.executeAsyncQuery() などの非同期クエリによって返される ResultSet に対して、このメソッドはクエリのステータスを返します。ステータスは、クエリが正常に終了したか、失敗したか、またはまだ終了していないかを示します。

引数

なし。

戻り値

QueryStatus 列挙型定数

スロー

このメソッドは SQLException をスローできます。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、 ResultSet オブジェクトを ラップ解除 する必要があります。

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

このメソッドの呼び出しを含むより広範な例については、 非同期クエリの例 をご参照ください。

オブジェクト: ResultSetMetaData

これにより、 ResultSetの列数など、 ResultSetに関する情報が提供されます。

メソッド

メソッド名

メモ

サポートされているメソッド

getCatalogName(int)

Snowflake固有の動作(詳細は以下を参照)。

getColumnCount()

getColumnDisplaySize(int)

getColumnLabel(int)

getColumnName(int)

getColumnType(int)

getColumnTypeName(int)

getPrecision(int)

getScale(int)

getSchemaName(int)

Snowflake固有の動作(詳細は以下を参照)。

getTableName(int)

Snowflake固有の動作(詳細は以下を参照)。

isAutoIncrement(int)

isCaseSensitive(int)

isCurrency(int)

isDefinitelyWritable(int)

isNullable(int)

isReadOnly(int)

isSearchable(int)

isSigned(int)

isWritable(int)

サポートされていないメソッド

なし。

Snowflake固有の動作

  • ResultSetMetaData クラスには close() メソッドがありません。ユーザーが ResultSetMetaData オブジェクトの作成元である ResultSet を閉じると、開いている ResultSetMetaData オブジェクトは暗黙的に閉じられます。

  • getCatalogName()getSchemaName()getTableName()

    ResultSet オブジェクトが 非同期クエリ 用である場合、これらのメソッドは空の文字列を返します。

インターフェイス: SnowflakeResultSetMetaData

SnowflakeResultSetMetaData インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えば ResultSet.getMetaData()メソッドを呼び出して、タイプ ResultSetMetaDataのオブジェクトを作成すると、実際には、 JDBC ResultSetMetaData インターフェイスと SnowflakeResultSetMetaData インターフェイスの両方を実装する別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakeResultSetMetaData メソッドにアクセスするには、オブジェクトを ラップ解除 します。

追加メソッド

メソッド名

メモ

サポートされているメソッド

getColumnIndex(String columnName)

getColumnNames()

getInternalColumnType(int column)

getQueryID()

getColumnIndex(String columnName):
目的

columnNameに対応する列のインデックスを返します。例えば、「BirthDate」という名前の列がテーブルの3番目の列である場合、getColumnIndex(「BirthDate」)は2を返します。(インデックスは1ベースではなく、0ベースです。)

引数

インデックスを検索する列の名前。

戻り値

columnNameに対応する列のインデックスを含む整数を返します。columNameが結果セットのどの列とも一致しない場合、-1を返します。

スロー

メソッドは SQLException をスローできます。

getColumnNames():
目的

この関数は、結果セット内のすべての列名のリストを返します。

これは、インデックスに基づいて単一の列名を返す ResultSetMetaDataの関数 getColumnName(int column)とは異なります。

引数

なし。

戻り値

返される値のデータ型は「List<String>」です。リストには列の名前が含まれています。名前は列インデックスと同じ順序です。

スロー

メソッドは SQLException をスローできます。

getInternalColumnType(int column):
目的

指定された列のデータ型を返します。

引数

column:これは、データ型が必要な列のインデックス(1ベース)を示します。

戻り値

指定された列のデータ型を返します。データ型は整数です。

スロー

メソッドは SQLException をスローできます。

getQueryID()
目的

このメタデータが適用されるクエリのSnowflakeクエリ ID を返します。

引数

なし。

戻り値

このメソッドは、このメタデータが生成されたクエリのクエリ ID を返します。クエリ ID は、 UUIDを含む文字列です。 UUIDs に関する情報は、 SQL 関数 UUID_STRING の説明に含まれています。

スロー

メソッドは SQLException をスローできます。

オブジェクト: Statement

Statement オブジェクトは SQL ステートメントを表します。ステートメントオブジェクトを使用すると、ユーザーは次のようなタスクを実行できます。

  • SQL ステートメントを実行します。

  • ステートメントの実行のタイムアウトを設定します。

  • クエリの結果セットを取得します。

メソッド

メソッド名

メモ

サポートされているメソッド

cancel()

close()

Snowflake固有の動作(詳細は以下を参照)。

execute(String)

executeQuery(String)

executeUpdate(String)

getBatchQueryID()

Snowflake固有の動作(詳細は以下を参照)。

getMaxFieldSize()

getMaxRows()

getMoreResults()

getQueryTimeout()

getResultSet()

getUpdateCount()

Snowflake固有の動作(詳細は以下を参照)。

setCursorName(String)

setMaxRows(int)

setQueryTimeout(int)

サポートされていないメソッド

clearWarnings()

getWarnings()

setEscapeProcessing(boolean)

setMaxFieldSize(int)

Snowflake固有の動作

  • close()

    このメソッドはオブジェクトを閉じます。オブジェクトが閉じられた後、閉じられたオブジェクトのほとんどすべてのメソッドを呼び出すと、 SQLException が発生します。既に閉じられているオブジェクトで close を呼び出しても問題はなく、例外は発生しません。

  • getBatchQueryID()

    このメソッドは、この Statement の最後に実行されたクエリバッチのSnowflakeクエ リIDs のリストを返します。ステートメントでクエリがまだ実行されていない場合、メソッドはnullを返します。

    このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、ステートメントを ラップ解除 する必要があります。例:

        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()

    このメソッドは、最後に実行された SQL ステートメントによって更新された行の数を返します。

    • ステートメントが DML ステートメント(INSERT、 UPDATE、 DELETEなど)であった場合、 getUpdateCount() は追加、削除、または変更された行の数を返します。行が変更されていない場合、この値は 0 になる可能性があることに注意してください。

    • ステートメントが SELECT ステートメントだった場合、 getUpdateCount()-1 を返します。

    • ステートメントが DDL ステートメントだった場合、 getUpdateCount()-1 を返します。

インターフェイス: SnowflakeStatement

SnowflakeStatement インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えばConnection.createStatement()メソッドを呼び出して、タイプがステートメントのオブジェクトを作成すると、実際には、 JDBC ステートメントインターフェイスと SnowflakeStatement インターフェイスの両方を実装する別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakeStatement メソッドにアクセスするには、オブジェクトを ラップ解除 します。

追加メソッド

メソッド名

説明

executeAsyncQuery()

非同期クエリを実行します。

getQueryID()

この Statement の最後に実行されたクエリのSnowflakeクエリ ID を返します。

setParameter(String, Value)

Snowflake固有のパラメーターを設定します。

executeAsyncQuery(String)
目的

このメソッドは、 非同期クエリ を実行します。これにより、実行のために SQL ステートメントを送信し、クエリが完了するのを待たずに呼び出し元に制御を返します。

引数

実行する SQL コマンドを含む文字列。 executeQuery() に有効なすべての SQL ステートメントは、 executeAsyncQuery() にも有効です。

注釈

PUT や GET などのファイル転送ステートメントは executeAsyncQuery() に対して有効ですが、同期的に動作します。

戻り値

「空」の ResultSet。ユーザーは、クエリ結果が利用可能になるまで resultSet.unwrap(SnowflakeResultSet.class).getStatus() を呼び出して、結果セットをポーリングする必要があります。

スロー

メソッドは SQLException をスローできます。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、ステートメントオブジェクトを ラップ解除 する必要があります。

このメソッドの呼び出しを含む例については、 非同期クエリの例 をご参照ください。

getQueryID()
目的

このメソッドは、この Statement で最後に実行されたクエリのSnowflakeクエリ ID を返します。

引数

なし。

戻り値

このステートメントの最後に実行されたクエリのクエリ ID。クエリ ID は、 UUIDを含む文字列です。ステートメントでクエリがまだ実行されていない場合、メソッドはnullを返します。

スロー

メソッドは SQLException をスローできます。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、ステートメントを ラップ解除 する必要があります。

非同期クエリ の場合、クエリの実行が完了するまでクエリ ID は利用できません。 executeAsyncQuery() を呼び出した後、ステートメントの実行が完了する前に SnowflakeStatement.getQueryID() を呼び出すと、戻り値が NULL になる可能性があります。代わりに、 executeAsyncQuery() から返された ResultSet オブジェクトで resultSet.unwrap(SnowflakeResultSet.class).getQueryID() を呼び出します。

    String queryID1;
    queryID1 = statement.unwrap(SnowflakeStatement.class).getQueryID();
setParameter(String parameter_name, <type> <value>)
目的

SnowflakeStatement クラスは、Snowflake拡張機能として setParameter メソッドを提供します。これにより、呼び出し元はSnowflake固有の JDBC パラメーターを設定できます。

メソッドがオーバーロードされています。異なる JDBC パラメーターには異なるデータ型が必要です。関数に2番目の引数として渡すことができる有効なデータ型ごとにメソッドが存在します。

引数
parameter_name:

この文字列には、事前定義のSnowflake JDBC パラメーターの名前が含まれている必要があります。定義済みの JDBC パラメーター(およびそれらの有効な値または範囲)を以下にリストします。

JDBC パラメーター

メモ

MULTI_STATEMENT_COUNT

ステートメントの数を指定する整数(0 =ステートメントの数に制限はなく、 1 以上は、実行されるステートメントの正確な数を示します)。

value:

これは、指定された JDBC パラメーターに割り当てる値です。データ型が指定した JDBC パラメーターと互換性があることを確認してください。

戻り値

なし。

スロー

この関数は SQLExceptionをスローできます。

メモ

このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、ステートメントを ラップ解除 する必要があります。

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

インターフェイス: SQLException

SQLException オブジェクトは、エラーが発生すると JDBC ドライバーメソッドによってスローされ、そのエラーに関する情報が含まれます。

メソッド名

説明

getErrorCode()

Snowflake固有のエラーコードを返します。

getMessage()

これは、エラーを説明する文字列を返します。

getSQLState()

SQLStateを返します。

getErrorCode()
目的

このメソッドは、カスタムSnowflakeエラーコードを返します。

引数

なし。

戻り値

Snowflake固有のエラーコードです。

メモ

getSQLState() メソッドもご参照ください。

getMessage()
目的

このメソッドは、エラーを説明する文字列を返します。

引数

なし。

戻り値

Snowflake固有のエラーメッセージ。

getSQLState()
目的

このメソッドは、エラーに基づいて5文字の英数字値を含む文字列を返します。

引数

なし。

戻り値

Snowflake固有の SQLState です。 SQLState は、発生した特定のエラーを示す5文字の英数字文字列です。