JDBC ドライバー API サポート¶
Snowflake JDBC ドライバーは、 JDBC タイプ4のドライバーで、 JDBC APIのバージョン1.0のコア JDBC 機能をサポートしています。 APIのそれ以降のバージョンのメソッドを試すことはできますが、Snowflakeはこれらのメソッドがサポートされていることを保証しません。
完全な API リファレンスについては、 Java SE Technologiesのドキュメント をご参照ください。
Snowflake JDBC ドライバーにはJavaLTS (長期サポート)バージョン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 は、ストアドプロシージャの実行に使用されます。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
サポートされていないメソッド |
|
なし。 |
Snowflake固有の動作¶
なし。
インターフェイス: SnowflakeCallableStatement¶
SnowflakeCallableStatement インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えばConnection.prepareCall()メソッドを呼び出して、タイプ CallableStatementのオブジェクトを作成すると、実際には、 JDBC CallableStatement インターフェイスと SnowflakeCallableStatement インターフェイスの両方を実装する、別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakeCallableStatement メソッドにアクセスするには、オブジェクトを ラップ解除 します。
追加メソッド¶
メソッド名 |
説明 |
|---|---|
|
この |
- getQueryID()¶
- 目的:
このメソッドは、この
CallableStatementで最後に実行されたクエリのSnowflakeクエリ ID を返します。呼び出し可能なステートメントでクエリがまだ実行されていない場合、メソッドはnullを返します。- 引数:
なし。
- 戻り値:
このメソッドは、 UUIDを含むストリングとして ID を返します。 UUIDs に関する情報は、 SQL 関数 UUID_STRING の説明に含まれています。
- スロー:
メソッドは
SQLExceptionをスローできます。
オブジェクト: Connection¶
Connection オブジェクトは、データベースサーバーへの接続を表します。接続オブジェクトを使用すると、ユーザーは特定のデータベースサーバーに接続するだけでなく、 SQL ステートメントの実行に使用できる Statement オブジェクトを作成することもできます。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
|
|
|
|
Snowflake固有の動作(以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(以下を参照) |
|
|
|
|
|
|
|
このメソッドを呼び出すと、 |
|
このメソッドを呼び出すと、 |
|
|
|
|
サポートされていないメソッド |
|
|
|
|
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 インターフェイスでサポートされるメソッドに追加されます。
メソッド名 |
説明 |
|---|---|
|
非同期で起動された SQL ステートメントのクエリ ID を指定すると、クエリ結果を取得して ResultSet オブジェクト内に返します。 |
|
指定された内部ステージからファイルをダウンロードし、 InputStream を返します。 |
|
現在のセッションのセッション ID を取得します。 |
|
オーバーロードされた |
|
ストリームからのデータを圧縮し、内部ステージで指定されたパスとファイル名にアップロードします。 |
- 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)がサポートする機能に関する情報を提供します。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
サポートされていないメソッド |
|
|
|
|
Snowflake固有の動作¶
- public ResultSet getColumnPrivileges(String, String, String, String)
Snowflakeは列レベルの権限をサポートしていないため、このメソッドは常に空のセットを返します。
- public ResultSet getStreams(String, String, String)
- 目的:
このメソッドは、指定されたデータベースとスキーマに含まれる ストリーム に関する情報を返します。
- 引数:
- 戻り値:
このメソッドは、各ストリームの行を含む
ResultSetを返します。各行には、次の列が含まれます。name: ストリームの名前。database_name: ストリームを含んでいるスキーマのデータベースの名前。データベースオブジェクト(例: ストリーム)はスキーマに含まれ、スキーマはデータベースに含まれます。
schema_name: ストリームを含んでいるスキーマの名前。owner: ストリームを所有するロール。comment: ストリームに関連付けられたコメント。table_name: DML の更新がストリームによって追跡されるテーブルの名前。source_type: ストリームのソースオブジェクト。可能な値は次のとおりです。tableviewdirectory tableexternal table
base_tables: ビューの基になるテーブル。この列は、ビューのストリームに対してのみ適用されます。type: ストリームの型。現在、関数は常にDELTAを返します。stale:stale_after時間が経過する前に、ストリームの最終読み取りがあったかどうかを示します。TRUEの場合は、ストリームが古くなっている可能性があります。ストリームが古くなっていると、読み取ることができません。ストリームを再作成して、ストリームからの読み取りを再開することができます。ストリームが古くなるのを防ぐには、
stale_after時間が経過する前にストリームを消費する必要があります。mode: ストリームの型。可能な値は次のとおりです。APPEND_ONLY: ストリームは追加専用ストリームであることを示します。INSERT_ONLY: ストリームは挿入された行の情報のみを返すことを示します。この値は、外部テーブルのストリームにのみ適用されます。DEFAULT: ストリームはテーブル上にあることを示します。
- スロー:
SQL エラーが発生した場合、このメソッドは
SQLExceptionをスローします。
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¶
ドライバーは、データベースへの接続を取得し、ドライバー自体に関する情報を取得できるメソッドを提供します。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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のパラメーターに関する情報を提供します。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
|
|
|
|
|
|
|
|
|
|
|
サポートされていないメソッド |
|
|
|
|
|
|
Snowflake固有の動作¶
なし。
オブジェクト: PreparedStatement¶
PreparedStatement インターフェイスは、たとえばクエリを実行できるメソッドを記述します。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
サポートされていないメソッド |
|
|
|
|
|
|
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()などの別のメソッドを使用します。
setObject()タイムスタンプ変数をタイムスタンプ列にバインドする場合は、このメソッドを使用して、タイムスタンプ値の解釈に使用する必要があるタイムスタンプのバリエーション(TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ)を指定できます。詳細については、 タイムスタンプ列への変数のバインド をご参照ください。
インターフェイス: SnowflakePreparedStatement¶
SnowflakePreparedStatement インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えばConnection.prepareStatement()メソッドを呼び出して、タイプ PreparedStatementのオブジェクトを作成すると、実際には、 JDBC PreparedStatement インターフェイスと SnowflakePreparedStatement インターフェイスの両方を実装する別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakePreparedStatement メソッドにアクセスするには、オブジェクトを ラップ解除 します。
追加メソッド¶
以下のメソッドは、 PreparedStatement インターフェイスでサポートされているメソッドに追加されています。
メソッド名 |
説明 |
|---|---|
|
非同期クエリを実行します。 |
|
この |
- 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()¶
- 目的:
クエリの実行中にエラーが発生した場合、このメソッドはサーバーからエラーコードを返します。
- 引数:
なし。
- 戻り値:
メソッドは、エラーコードを
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 は読み取り専用オブジェクトです。更新できません。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
サポートされていないメソッド |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作¶
close()オブジェクトを閉じます。オブジェクトが閉じられた後、閉じられたオブジェクトのほとんどすべてのメソッドを呼び出すと、
SQLExceptionが発生します。既に閉じられているオブジェクトでcloseを呼び出しても問題はなく、例外は発生しません。getDate()、getTime()、getTimestamp()バージョン3.12.17以降のバージョンの JDBC ドライバーでは、これらのメソッドはセッションタイムゾーン( TIMEZONE パラメーターで指定)を使用します。古いバージョンでは、 JVM のタイムゾーンが使用されます。
JVM のタイムゾーンを使用するようにこれらのメソッドを変更するには、 JDBC_USE_SESSION_TIMEZONE パラメーターを
FALSEに設定します。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 メソッドにアクセスするには、オブジェクトを ラップ解除 します。
追加メソッド¶
メソッド名 |
説明 |
|---|---|
|
この結果セットを生成したステートメントのSnowflakeクエリ ID を返します。 |
|
非同期クエリによって返された ResultSet に対して、クエリのステータスを返します。 |
- getQueryID()
- 目的:
このメソッドは、この結果セットを生成したステートメントのSnowflakeクエリ ID を返します。
- 引数:
なし。
- 戻り値:
このメソッドは、 UUIDを含むストリングとして ID を返します。
- 注意:
このメソッドは、 JDBC 標準のSnowflake拡張です。この方法を使用するには、
ResultSetを ラップ解除 する必要があります。- 例:
String queryID2; queryID2 = resultSet.unwrap(SnowflakeResultSet.class).getQueryID();
- getStatus()¶
- 目的:
SnowflakeStatement.executeAsyncQuery()などの非同期クエリによって返される ResultSet に対して、このメソッドはクエリのステータスを返します。ステータスは、クエリが正常に終了したか、失敗したか、またはまだ終了していないかを示します。- 引数:
なし。
- 戻り値:
- スロー:
このメソッドは
SQLExceptionをスローできます。- 注意:
このメソッドは、 JDBC 標準のSnowflake拡張です。このメソッドを使用するには、 ResultSet オブジェクトを ラップ解除 する必要があります。
- 例:
QueryStatus queryStatus = resultSet.unwrap(SnowflakeResultSet.class).getStatus();
このメソッドの呼び出しを含むより広範な例については、 非同期クエリの例 をご参照ください。
オブジェクト: ResultSetMetaData¶
これにより、 ResultSetの列数など、 ResultSetに関する情報が提供されます。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
サポートされていないメソッド |
|
なし。 |
Snowflake固有の動作¶
ResultSetMetaDataクラスにはclose()メソッドがありません。ユーザーがResultSetMetaDataオブジェクトの作成元であるResultSetを閉じると、開いているResultSetMetaDataオブジェクトは暗黙的に閉じられます。getCatalogName()、getSchemaName()、getTableName()ResultSet オブジェクトが 非同期クエリ 用である場合、これらのメソッドは空の文字列を返します。
GEOGRAPHY 列に対して、
getColumnTypeNameはGEOGRAPHYを返します。getColumnTypeおよびgetColumnClassNameメソッドは、列タイプがGEOGRAPHYであることを示してはいません。
インターフェイス: SnowflakeResultSetMetaData¶
SnowflakeResultSetMetaData インターフェイスには、Snowflake固有のメソッドが含まれています。Snowflake JDBC ドライバーを使用して、例えば ResultSet.getMetaData()メソッドを呼び出して、タイプ ResultSetMetaDataのオブジェクトを作成すると、実際には、 JDBC ResultSetMetaData インターフェイスと SnowflakeResultSetMetaData インターフェイスの両方を実装する別の(隠された)Snowflake固有のタイプのオブジェクトを取得します。そのオブジェクトの SnowflakeResultSetMetaData メソッドにアクセスするには、オブジェクトを ラップ解除 します。
追加メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
|
|
|
|
|
|
- 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をスローできます。
オブジェクト: SnowflakeTimestampWithTimezone¶
SnowflakeTimestampWithTimezone オブジェクトは、Java Timestamp オブジェクトのタイムスタンプに関連付けられたタイムゾーンに関する情報を提供します。Java Timestamp 文字列から情報を解析する代わりに、このオブジェクトを使用してタイムゾーンを直接抽出できます。この機能にアクセスするには、次のJavaライブラリをインポートする必要があります。
java.sql.Timestamp;java.time.ZonedDateTime;java.util.TimeZone;
メソッド¶
メソッド名 |
注意 |
|---|---|
コンストラクター |
|
SnowflakeTimestampWithTimezone(
long seconds,
int nanoseconds,
TimeZone tz)
|
|
SnowflakeTimestampWithTimezone(
Timestamp ts,
TimeZone tz)
|
|
SnowflakeTimestampWithTimezone(
Timestamp ts)
|
|
サポートされているメソッド |
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
Snowflake固有の動作(詳細は以下を参照)。 |
Snowflake固有の動作¶
getTimezone()タイムスタンプからタイムゾーンを返します。
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()SnowflakeTimestampWithTimezoneタイムスタンプをゾーンの日時(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); }
オブジェクト: Statement¶
Statement オブジェクトは SQL ステートメントを表します。ステートメントオブジェクトを使用すると、ユーザーは次のようなタスクを実行できます。
SQL ステートメントを実行します。
ステートメントの実行のタイムアウトを設定します。
クエリの結果セットを取得します。
メソッド¶
メソッド名 |
注意 |
|---|---|
サポートされているメソッド |
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
|
|
|
|
|
Snowflake固有の動作(詳細は以下を参照)。 |
|
|
|
|
|
|
サポートされていないメソッド |
|
|
|
|
|
|
|
|
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 メソッドにアクセスするには、オブジェクトを ラップ解除 します。
追加メソッド¶
メソッド名 |
説明 |
|---|---|
|
非同期クエリを実行します。 |
|
この |
|
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 ドライバーメソッドによってスローされ、そのエラーに関する情報が含まれます。
メソッド名 |
説明 |
|---|---|
|
Snowflake固有のエラーコードを返します。 |
|
これは、エラーを説明する文字列を返します。 |
|
SQLStateを返します。 |
- getErrorCode()
- 目的:
このメソッドは、カスタムSnowflakeエラーコードを返します。
- 引数:
なし。
- 戻り値:
Snowflake固有のエラーコードです。
- 注意:
getSQLState()メソッドもご参照ください。
- getMessage()¶
- 目的:
このメソッドは、エラーを説明する文字列を返します。
- 引数:
なし。
- 戻り値:
Snowflake固有のエラーメッセージ。
- getSQLState()¶
- 目的:
このメソッドは、エラーに基づいて5文字の英数字値を含む文字列を返します。
- 引数:
なし。
- 戻り値:
Snowflake固有の SQLState です。 SQLState は、発生した特定のエラーを示す5文字の英数字文字列です。