目次 | 前の項目 | 次の項目 JDBCTM ガイド: 使用の開始


11 解説

JDBC API の一部について、詳しく解説してほしいという要望が多数ありました。この章では、一部の機能について補足説明します。

11.1     Connection.isClosed()

Connection.isClosed() メソッドが保証しているのは、Connection.closed() が呼び出されたあとでは真が返るということだけです。一般に、Connection.isClosed() を呼び出して、データベース接続が有効か無効かを判定することはできません。通常、クライアントでは、操作が試みられたときにスローされる例外をキャッチすることで、接続が無効になっていることを判断できます。

11.2     Statement.setCursorName()

Statement.setCursorName() メソッドを使うと、SQL 文で生成される次の結果セットで使われるカーソルのカーソル名を、アプリケーションで指定できます。結果セットのカーソル名は、ResultSet.getCursorName() を呼び出して取得できます。結果セットを生成する前に Statement.setCursorName() を呼び出した場合、ResultSet.getCursorName() からは Statement.setCursorName() で指定した値が常に返ります。

結果セットを作成する前に Statement.setCursorName() メソッドを呼び出しても、結果セットは更新可能になりません。 つまり、Statement.setCursorName() を呼び出してあっても、結果セットで位置決めされた更新または削除を行うことはできません。デフォルトでは、結果セットは読み取り専用です。

カーソル名を使う場合は、必ず次のように SQL 文の中に埋め込みます。

UPDATE ...WHERE CURRENT OF <cursor>

カーソル名を使うと、位置決めされた更新または位置決めされた削除を行うことができます。位置決めされた更新および削除を結果セットで有効にするには、次の形式の選択クエリーを使って結果セットを生成する必要があります。

SELECT FOR UPDATE ... FROM ... WHERE ...

Statement.setCursorName() メソッドを呼び出してカーソル名を指定していない場合は、SELECT FOR UPDATE 文が実行されるときに、JDBC ドライバまたは背後の DBMS がカーソル名を生成します。 ただし、この処理が行われるのは、位置決めされた更新または削除がサポートされている場合だけです。結果セットが読み取り専用で、Statement.setCursorName() によるカーソル名の指定が行われていない場合は、ResultSet.getCursorName() から NULL が返ります。

11.3     文字の変換

文字列や文字の Java Unicode 符号化とアクセスするデータベースの文字符号化の間の双方向の自動変換は、JDBC ドライバの実装で行うことが求められます。JDBC API では、データベースでの文字符号化をオーバーライドする方法は定義されていません。たとえば、ASCII データベースに Unicode 文字を格納する方法を API は定義していません。

11.4     入力パラメータとしてのストリーム

アプリケーションが setXXX() メソッドまたは updateXXX() メソッドを使って入力値としてストリームを渡す場合、 PreparedStatement.execute()、executeQuery()、executeUpdate()、executeBatch()、または ResultSet.insertRow()、updateRow() のいずれかのメソッドが呼び出されるまで、アプリケーションはストリームを読み取り可能な状態に保つ必要があります。JDBC ドライバは、これらのメソッドのいずれかが呼び出されるまで、ストリーム値の読み込みを待つようには要求されていません。

11.5     Statement 以外によって作成された結果セット

メタデータの操作で作成された ResultSet オブジェクトでは、順方向スクロールだけが可能です。DatabaseMetaData 操作で生成される結果セットには、スクロール機能はありません。



目次 | 前の項目 | 次の項目
jdbc@eng.sun.com または jdbc-business@eng.sun.com
Copyright © 1996-1999 Sun Microsystems, Inc. All rights reserved.