目次 | 前の項目 | 次の項目 | JDBCTM ガイド: 使用の開始 |
拡張メタデータ - 準備された文のパラメータおよび準備された文の結果セットに対するメタデータの追加。JDBC API では、準備された文のパラメータについてのメタデータが提供されていない。 また、文を実行しないで結果についての情報を得るメタデータも提供されていない (SQL92 の DESCRIBE OUTPUT および ODBC SQLDescribeParam に相当する機能)
セキュリティ - 背後で行われている通信のプロパティ (SSL など) をアプリケーションで選択できるようにする。SSL Socket の実装を提供する。JDBC ベースのアプリケーションでは、通信回線レベルのプロトコルを保護するためにドライバがサポートする機構 (暗号化など) を選択できなければならない。SSL については、1 つの方法としては、アプリケーションから特定の暗号群 (キー交換アルゴリズム、バルク暗号化、MAC <メッセージ認証アルゴリズム>) を指定できるようにする
セキュリティ認証 - ドライバがサポートする認証実行のための機構を、アプリケーションで選択できるようにする。 ユーザ名とパスワード、Kerberos トークン、デジタル証明書などの機構をサポートする必要がある
コマンド完了イベント - コマンドが完了したときに (現在のコマンドと定例コマンドの両方、同期または非同期) 発生する、ユーザ提供イベントのオブジェクトのサポート。各種イベント: 接続イベント、切断イベント、接続前イベント
カーソルを実装する場所 - クライアント側とサーバ側のサポート
パラメータの管理 - サポート: Append、GetCount、GetItem (名前と位置で)、Delete、および Refresh
SQL と Java のハイブリッドな統合 - Java クラスを定義する仕組みを提供し、SQL の原子的なデータ型または Java クラスの列を含むテーブルに対する SQL と Java の複合クエリーを行う機構を提供する
特殊なデータ型 - OLAP、Spatial、TimeSeries などの特殊なデータ型に対する拡張機能を提供する
Date、Time、Timestamps の直列化 - これらの型を直列化可能にする
非同期要求 - 呼び出し元が文の非同期実行を要求できるようにする
Java クラス - Java クラスと Java Beans の SQL 特殊化の概念を導入する。 これは、データベースやビジネスアプリケーションの分野で Java オブジェクトを扱う際に役立つ SQL99 の概念を導入するものである。たとえば、あるクラスのどのメソッド定義を使えば比較などの操作をオブジェクトで実行できるかを理解することは、データベースシステムにとって有用である。そのための方法の 1 つは、「汎用」メソッド名を導入することである。このような方法は、データベース以外に、一般的なビジネスアプリケーションでも使用できる
特定の機能がドライバでサポートされているかどうかを調べるのに個別に API を呼び出すのではなく、*levels* の JDBC 互換性を追加する
ドライバが認識した URL の形式を返す API 呼び出しを追加する
データベースのデータをネイティブな形式でカプセル化する行オブジェクトを追加する
Statement
インタフェースの新しいプロパティのそれぞれに個別にメソッドを用意する代わりに、新しいクラス ResultSetProperties
を作り、これらのプロパティの取得と設定を行うメソッドをすべてそこに収めてはどうかという指摘がありました。Statement には ResultSetProperties
プロパティの取得と設定を行う 2 つの新しいメソッドだけが含まれることになります。この方法は、Statement
インタフェースの簡素化に役立ちます。 ResultSet
を継承する新しい CursorResultSet
インタフェースを追加し、メソッド CursorStatement prepareUpdate() throws SQLException
を追加する、あるいは、既存の ResultSet
インタフェースに prepareUpdate
メソッドを追加し、結果セットにカーソルが設定されていない場合は異常終了するように定義してはどうかという指摘があります。 また、PreparedStatement
を継承する新しい CursorStatement
インタフェースを追加し、 void update() throws SQLException
メソッドおよび void delete() throws SQLException
メソッドを追加してはどうかという指摘があります。ResultSet
と ScrollableResultSet
の間の継承階層に中間インタフェース CursorResultSet
を設けることは有効です。CursorStatement
を設ける目的は、カーソル操作を調べるためにクエリーを 1 つ 1 つ解析する必要がないようにすることです。CursorStatement
が PreparedStatement
を継承する理由は、setXXX メソッドにアクセスするためです。setXXX() メソッドを使って、CursorResultSet
の現在行の対応する列に新しい値を設定します。executeUpdate()
メソッドが、実際の更新 (設定されているパラメータ値を使って) または削除 (パラメータ値は無視) を行います。execute()
メソッドと executeQuery()
は、常に SQLException
をスローするようにオーバーライドされます。さらに、CursorStatement
は作成元の CursorResultSet
に結び付けられて、CursorResultSet
がカーソルの再配置 (次、相対、絶対、先頭、末尾など) を行なったときは常に、CursorStatement
がカーソルの移動を自動的に追跡し、更新や削除を行うメソッドが正しい行を処理するようにします。** これらの機能は 1 対 1 の関係になっていると考えられるため、CursorStatement
を作らずに CursorResultSet
への機能の追加だけにすることが検討されています。 Statement
インタフェースに void setCursorProperties(CursorProperties props) throws SQLException
を追加し、新しく java.sql.CursorProperties
クラスを定義することが提案されています。文を実行したときに、ResultSet
の適切なサブクラスが返されるようになるので、文のプロパティを追加するという案には賛成です。ただし、このようなプロパティのためのアクセス用メソッドと設定用メソッドの対を個別に Statement
に追加するのではなく、public メンバを持つ CursorProperties
クラスを定義し、Statement
には新しいメソッド void setCursorProperties(CursorProperties props) throws SQLException
を 1 つだけ追加することをお勧めします。このようにすると、たとえば、Statement.setFetchSize
メソッドや getFetchSize
メソッドを新しく作る必要がなくなります。CursorProperties
には、適切なデフォルト値が設定された CursorProperties
オブジェクトを返す public コンストラクタを用意します (TBD)。このクラスのメンバには、次のものが含まれます。0. boolean useCursors
- 真の場合、文は executeQuery
から CursorResultSet
を返します。1. String cursorName - Statement.setCursorName()
は推奨されなくなります。2. boolean scrollable - 真の場合、文は executeQuery
から ScrollableResultSet
を返します。3. boolean readonly - 真の場合、このカーソルは READONLY です。4. int rowCacheSize - データベースから一度に取り出す行数についての、ドライバに対するヒントです。5. boolean closeOnEndTransaction - ANSI SQL '92 のカーソルは、コミットまたはロールバックすると自動的に閉じられますが、多くのデータベースでは効率を良くするためカーソルを開いたままにできます。 6. String[] updatableColumns - SQL '92 の文法で「FOR UPDATE OF <column list>」句に使われる列の一覧です。7. boolean sensitive - 真の場合、カーソルが開いている間にコミットされた元のテーブルに対する変更は、アプリケーションの画面でスクロールするとその行に表示されます。