モジュール java.sql
パッケージ java.sql
Java™プログラミング言語を使用してデータソース(通常はリレーショナル・データベース)に格納されたデータにアクセスして処理するためのAPIを提供します。 このAPIに含まれているフレームワークで、複数のドライバをインストールして複数のデータ・ソースに動的にアクセスできます。 JDBC™APIは、主にSQL文をデータベースに渡すように設計されていますが、任意のデータソースからのデータを表形式で読み書きする機能を備えています。 
 JDBC 4.3 APIで導入された
 JDBC 4.2 APIで導入された
 JDBC 4.1 APIで導入された
 JDBC 4.0 APIで導入された
 JDBC 3.0 APIで導入された
 JDBC 2.1コアAPIで導入された
 JDBC 2.0オプション・パッケージAPIで導入された
 
javax.sql.RowSetインタフェース・グループを介して使用可能な読み込み/書込み機能は、スプレッドシート、フラット・ファイル、またはほかの表形式のデータ・ソースのデータを使用および更新するためにカスタマイズできます。 
 JDBC™4.3 APIに含まれるもの
JDBC™4.3 APIには、JDBCコアAPIと呼ばれるjava.sqlパッケージと、JDBCオプション・パッケージAPIと呼ばれるjavax.sqlパッケージが含まれています。 この完全なJDBC APIは、Java™ Standard Edition (Java SE™)、version 7に含まれています javax.sqlパッケージは、クライアント側のAPIからサーバー側のAPIにJDBC APIの機能を拡張し、Java™ Enterprise Edition (Java EE™)テクノロジの不可欠な部分です。 
 バージョン
JDBC 4.3 APIには以前のバージョンのJDBC APIがすべて組み込まれています。- JDBC 4.2 API
- JDBC 4.1 API
- JDBC 4.0 API
- JDBC 3.0 API
- JDBC 2.1コアAPI
-  JDBC 2.0オプション・パッケージAPI
 (JDBC 2.1コアAPIとJDBC 2.0オプション・パッケージAPIを合わせてJDBC 2.0 APIと呼ぶ)
- JDBC 1.2 API
- JDBC 1.0 API
クラス、インタフェース、メソッド、フィールド、コンストラクタ、および例外には、これらがいつJavaプラットフォームに導入されたのかを示す次のsinceタグがあります。 これらの"since"タグをJDBC APIのJavadoc™コメントで使用すると、次のことが示されます:
- since 9 -- JDBC 4.3 APIに新しく追加。Java SEプラットフォーム, Version 9の一部
- since 1.8 -- JDBC 4.2 APIに新しく追加。Java SEプラットフォーム, Version 8の一部
- since 1.7 -- JDBC 4.1 APIに新しく追加。Java SEプラットフォーム, Version 7の一部
- since 1.6 -- JDBC 4.0 APIに新しく追加。Java SEプラットフォーム, Version 6の一部
- since 1.4 -- JDBC 3.0 APIに新しく追加。J2SEプラットフォーム, Version 1.4の一部
- since 1.2 -- JDBC 2.0 APIに新しく追加。J2SEプラットフォーム, Version 1.2の一部
- 1.1以降、"since"タグがない -- 元のJDBC 1.0 APIとJDK?、バージョン1.1の一部
ノート: 新機能の多くはオプションです。したがって、ドライバおよびドライバがサポートする機能にはいくつかのバリエーションがあります。 機能を使用する前に、その機能がサポートされているかどうかをドライバのドキュメントで必ず確認してください。
 注意: クラスSQLPermissionはJava™ 2 SDK、Standard Edition、バージョン1.3リリースで追加されました。 このクラスを使用すると、表名、列データなどの情報を格納するDriverManagerに関連したログ・ストリームへの無権限でのアクセスを防止できます。 
 
java.sqlパッケージに含まれるもの
 java.sqlパッケージは、次の用途のAPIを含んでいます。
 - DriverManager機能を介したデータベースとの接続- DriverManagerクラス -- ドライバとの接続
- SQLPermissionクラス -- アプレットなどのセキュリティ・マネージャ内で実行されるコードが- DriverManagerを介してログ・ストリームを設定しようとするときにアクセス権を許可する
- Driverインタフェース -- JDBCテクノロジに基づくドライバ(JDBCドライバ)の登録および接続をAPIに提供する。通常は- DriverManagerクラスだけが使用する
- DriverPropertyInfoクラス -- JDBCドライバのプロパティを提供する。一般ユーザーは使用しない
 
- データベースへのSQL文の送信
   - Statement-- 基本SQL文を送信する
- PreparedStatement-- 準備済み文または基本SQL文を送信する(- Statementから派生)
- CallableStatement-- データベース・ストアド・プロシージャを呼び出す(- PreparedStatementから派生)
- Connectionインタフェース -- 文を作成し、接続とそのプロパティを管理するメソッドを提供する
- Savepoint-- トランザクションでセーブポイントを提供する
 
- クエリー結果の取得と更新
   - ResultSetインタフェース
 
- SQL型をJavaプログラミング言語のクラスおよびインタフェースへ標準マッピング
   - Arrayインタフェース -- SQLの次をマッピングする:- ARRAY
- Blobインタフェース -- SQLの次をマッピングする:- BLOB
- Clobインタフェース -- SQLの次をマッピングする:- CLOB
- Dateクラス -- SQLの次をマッピングする:- DATE
- NClobインタフェース -- SQLの次をマッピングする:- NCLOB
- Refインタフェース -- SQLの次をマッピングする:- REF
- RowIdインタフェース -- SQLの次をマッピングする:- ROWID
- Structインタフェース -- SQLの次をマッピングする:- STRUCT
- SQLXMLインタフェース -- SQLの次をマッピングする:- XML
- Timeクラス -- SQLの次をマッピングする:- TIME
- Timestampクラス -- SQLの次をマッピングする:- TIMESTAMP
- Typesクラス -- SQL型の定数を提供する
 
- SQLユーザー定義型(UDT)をJavaプログラミング言語のクラスへカスタム・マッピング
   - SQLDataインタフェース -- このクラスのインスタンスへのUDTのマッピングを指定する
- SQLInputインタフェース -- ストリームからUDT属性を読み込むメソッドを提供する
- SQLOutputインタフェース -- ストリームへUDT属性を書き込むメソッドを提供する
 
- メタデータ
   - DatabaseMetaDataインタフェース -- データベースに関する情報を提供する
- ResultSetMetaDataインタフェース --- ResultSetオブジェクトの列に関する情報を提供する
- ParameterMetaDataインタフェース --- PreparedStatementコマンドのパラメータに関する情報を提供する
 
- 例外
      - SQLException-- データ・アクセスの障害が発生したときにほとんどのメソッドによってスローされ、その他の理由により一部のメソッドによってスローされる
- SQLWarning-- 警告を示すためにスローされる
- DataTruncation-- データが切り詰められた可能性があることを示すためにスローされる
- BatchUpdateException-- バッチ更新のコマンドがすべては正常に実行されなかったことを示すためにスローされる
 
JDBC 4.3 APIで導入されたjava.sqlとjavax.sqlの機能
 - Shardingサポートが追加されました
- 独立した作業単位であるリクエストが開始または終了するというヒントをドライバに提供できるように、Connectionが拡張されました。
- Shardingがサポートされているかどうかを判断するためのDatabaseMetaDataの拡張
- 現在ロードされ使用可能なJDBCドライバのストリームを返すdriversメソッドをDriverManagerに追加しました。
- Statementにリテラルと単純な識別子を含めるためのサポートが追加されました。
- メソッドが非推奨となったJava SEバージョンを明確化
JDBC 4.2 APIで導入されたjava.sqlとjavax.sqlの機能
 - JDBCType列挙と- SQLTypeインタフェースの追加
- CallableStatementでの- REF CURSORのサポート
- LOBの最大論理サイズとREF CURSORのサポートの有無を返すDatabaseMetaDataメソッド
- 大きい更新カウントのサポートの追加
JDBC 4.1 APIで導入されたjava.sqlとjavax.sqlの機能
 - Connection、- ResultSet、および- Statementオブジェクトをtry-with-resources文で使用できる
- CallableStatementと- ResultSetにサポートが追加され、- getObjectメソッドを使用して変換するJava型を指定しました。
- DatabaseMetaDataの擬似列を返すメソッドおよび生成されたキーが常に返されるかどうかを返すメソッド
- データベース・スキーマを指定し、物理接続を中止およびタイム・アウトさせるためのサポートのConnectionへの追加。
- 依存するオブジェクトがクローズされた場合に、Statementオブジェクトをクローズするサポートの追加
- Driver、- DataSource、- ConnectionPoolDataSourceおよび- XADataSourceの親ロガーの取得のサポート
JDBC 4.0 APIで導入されたjava.sqlとjavax.sqlの機能
 - 自動java.sql.Driver検出 -- Class.forNameを使用したjava.sql.Driverクラスのロードは不要
- 各国の文字セット・サポートの追加
- SQL:2003 XMLデータ型に対するサポートの追加
- SQLExceptionの拡張機能 -- 原因チェーンのサポートの追加。共通のSQLStateクラスの値コード用の新しいSQLExceptionの追加
- BLOB/CLOB機能の拡張 -- BLOB/CLOBインスタンスを作成して解放するためのサポートの提供、およびアクセシビリティを向上させるメソッドの追加
- SQL ROWIDにアクセスするためのサポートの追加
- JDBCアプリケーションで、通常はアプリケーション・サーバーまたは接続プール環境にある、ベンダーによってラップされたJDBCリソースのインスタンスにアクセスするためのサポートの追加
- PooledConnectionに関連付けられた- PreparedStatementがクローズされたか、無効であるとドライバが判断したときに通知される機能
JDBC 3.0 APIで導入されたjava.sqlとjavax.sqlの機能
 - プール文 -- プール接続に関連した文を再利用する
- セーブポイント -- 指定されたセーブポイントまでトランザクションをロールバックする
- ConnectionPoolDataSourceに定義されたプロパティ -- 接続のプール方法を指定する
- PreparedStatementオブジェクトのパラメータのメタデータ
- 自動生成された列から値を取得する
- 同時にオープンされているCallableStatementオブジェクトから複数のResultSetオブジェクトを返す
- CallableStatementオブジェクトへのパラメータを名前とインデックスによって識別する
- ResultSet保持機能 -- トランザクションの終了時にカーソルをオープンの状態に保持するべきかクローズの状態に保持するべきかを指定する
- Refオブジェクトが参照するSQL構造化型インスタンスを取得および更新する
- BLOB、- CLOB、- ARRAY、および- REFの各値をプログラムによって更新する。
- java.sql.Types.DATALINKデータ型の追加 -- JDBCドライバがデータ・ソースの外部に格納されたオブジェクトにアクセスできるようにする
- SQL型階層を取得するメタデータの追加
JDBC 2.1コアAPIで導入されたjava.sql機能
 - スクロール可能な結果セット -- 現在位置から特定の行または位置へのカーソルの相対的な移動を可能にする、ResultSetインタフェースの新しいメソッドを使用
- バッチ更新
- プログラムによる更新 -- ResultSet更新用メソッドを使用
- 新しいデータ型 -- SQL3データ型をマッピングするインタフェース
- ユーザー定義型(UDT)のカスタム・マッピング
- その他の機能として、パフォーマンスのヒント、文字ストリームの使用、java.math.BigDecimal値の全精度、追加セキュリティ、日、時間、およびタイムスタンプの各値でのタイムゾーンのサポートなど。
JDBC 2.0オプション・パッケージAPIで導入されたjavax.sql機能
 - 接続を確立するための手段としてのDataSourceインタフェース。 Java Naming and Directory Interface™ (JNDI)は、DataSourceオブジェクトをネーミング・サービスに登録したり、ネーミング・サービスを取得したりするために使用されます。
- プール接続 -- 接続の使用と再利用を可能にする
- 分散トランザクション -- 多様なDBMSサーバーに及ぶトランザクションを可能にする
- RowSetテクノロジ -- データを処理して渡す便利な手段を提供する
UDTのカスタム・マッピング
SQLで定義したユーザー定義型(UDT)をJavaプログラミング言語のクラスにマッピングできます。 SQL構造化型またはSQLDISTINCT型が、カスタム・マッピングできるUDTです。 次の3つのステップで、カスタム・マッピングを設定します。 
 - SQL構造化型またはSQL DISTINCT型をSQLで定義します
- SQL UDTをマッピングするJavaプログラミング言語のクラスを定義します。 このクラスはSQLDataインタフェースを実装している必要があります。
- 次の2項目を含むConnectionオブジェクトの型マップにエントリを作成します。- UDTの完全指定されたSQL名
- SQLDataインタフェースを実装するクラスの- Classオブジェクト
 
 これらがUDTの該当位置にあると、ResultSet.getObjectまたはCallableStatement.getObjectメソッドを呼び出した場合にUDTは自動的にUDTへのカスタム・マッピングを取得します。 また、PreparedStatement.setObjectは、オブジェクトをそのSQL型へ自動的にマッピングしてデータ・ソースにオブジェクトを格納します。 
 
パッケージの仕様
関連項目
- レッスン:JDBC Basics(The Javaxx Tutorials > JDBC™ Database Access)
- " JDBC™ API Tutorial and Reference, Third Edition "
- 
インタフェースのサマリー インタフェース 説明 Array SQL型ARRAYのJavaプログラミング言語でのマッピングです。Blob SQLBLOB値のJava(TM)プログラミング言語での表現(マッピング)です。CallableStatement SQLストアド・プロシージャを実行するのに使用されるインタフェースです。Clob SQLCLOB型のJava(TM)プログラミング言語でのマッピングです。Connection 特定のデータベースとの接続(セッション)を表現します。ConnectionBuilder DataSourceオブジェクトから作成されたビルダー。data sourceオブジェクトが表すデータベースへの接続を確立するために使用されます。DatabaseMetaData データベースに関する包括的な情報です。Driver すべてのドライバ・クラスが実装しなければならないインタフェースです。DriverAction DriverがDriverManagerからの通知を希望する場合に実装する必要があるインタフェースです。NClob SQLNCLOB型のJava(TM)プログラミング言語でのマッピングです。ParameterMetaData PreparedStatementオブジェクト内の各パラメータ・マーカーの型とプロパティに関する情報を取得するのに使用できるオブジェクトです。PreparedStatement プリコンパイルされたSQL文を表すオブジェクトです。Ref Javaプログラミング言語でのSQLREF値のマッピングで、データベースのSQL構造化型の値への参照となります。ResultSet データベースの結果セットを表すデータの表で、通常、データベースに照会する文を実行することによって生成されます。ResultSetMetaData ResultSetオブジェクトの列の型とプロパティに関する情報を取得するのに使用できるオブジェクトです。RowId SQL ROWID値のJavaプログラミング言語での表現(マッピング)です。Savepoint Connection.rollbackメソッドから参照される現在のトランザクション内のポイントであるセーブポイントの表現です。ShardingKey このオブジェクトがシャーディング・キーを表すことを示すために使用されるインタフェースです。ShardingKeyBuilder DataSourceまたはXADataSourceオブジェクトから作成され、サポートされるデータ型のサブキーを持つShardingKeyを作成するために使用されるビルダー。SQLData SQLユーザー定義型(UDT)をJavaプログラミング言語のクラスにカスタム・マッピングするのに使用されるインタフェースです。SQLInput SQL構造化型またはSQLの個別の型のインスタンスを表す値のストリームを格納する入力ストリームです。SQLOutput ユーザー定義型の属性をデータベースに書き戻すための出力ストリームです。SQLType JDBC型またはベンダー固有データ型と呼ばれる汎用SQL型を識別するために使用されるオブジェクトです。SQLXML SQL XML型のJavaTMプログラミング言語でのマッピングです。Statement 静的SQL文を実行し、作成された結果を返すために使用されるオブジェクトです。Struct SQL構造化型のJavaプログラミング言語の標準のマッピングです。Wrapper 委譲インスタンスが実際はプロキシ・クラスであるときにそのインスタンスを取得できる、JDBCクラスのインタフェースです。
- 
クラスのサマリー クラス 説明 Date ミリ秒の値をラップする薄いラッパーであり、これによってJDBCがミリ秒の値をSQLDATE値として扱うことができるようになります。DriverManager 一連のJDBCドライバを管理するための基本的なサービスです。DriverPropertyInfo 接続用のドライバ・プロパティです。SQLPermission SecurityManagerを有効にしてアプリケーションを実行しているコードが有効なときにSecurityManagerがチェックするアクセス権は、DriverManager.deregisterDriverメソッド、DriverManager.setLogWriterメソッド、DriverManager.setLogStream(deprecated)メソッド、SyncFactory.setJNDIContextメソッド、SyncFactory.setLoggerメソッド、Connection.setNetworkTimeoutメソッド、またはConnection.abortメソッドを呼び出します。Time java.util.Dateクラスの薄いラッパーで、このラッパーによってJDBC APIはこれをSQLTIME値として識別できます。Timestamp このクラスは、java.util.Dateの薄いラッパーで、このラッパーによってJDBC APIはこれをSQLTIMESTAMP値として識別できます。Types JDBC型と呼ばれる、汎用SQL型を識別するために使用する定数を定義するクラスです。
- 
列挙型のサマリー 列挙型 説明 ClientInfoStatus Connection.setClientInfoの呼出しによってプロパティを設定できない理由の状態の列挙です。JDBCType JDBC型と呼ばれる、汎用SQL型を識別するために使用する定数を定義します。PseudoColumnUsage 擬似/隠し列の使用の列挙を表す列挙です。RowIdLifetime RowIdの寿命の値の列挙です。
- 
例外のサマリー 例外 説明 BatchUpdateException バッチ更新操作中にエラーが発生したときにスローされるSQLExceptionのサブクラスです。DataTruncation MaxFieldSizeを超過した以外の理由でデータ値が予期せず切り詰められたときに、DataTruncation例外としてスローされる例外(書込み時)、またはDataTruncation警告として報告される例外(読込み時)です。SQLClientInfoException 1つ以上のクライアント情報プロパティをConnectionで設定できなかったときに、SQLExceptionのサブクラスがスローされます。SQLDataException SQLStateクラス値が「22」であるか、またはベンダー指定の条件下にあるときにスローされるSQLExceptionのサブクラスです。SQLException データベース・アクセス・エラーまたはその他のエラーに関する情報を提供する例外です。SQLFeatureNotSupportedException SQLStateクラス値が「0A」(ゼロA)のときにスローされるSQLExceptionのサブクラスです。SQLIntegrityConstraintViolationException SQLStateクラス値が「23」であるか、またはベンダー指定の条件下にあるときにスローされるSQLExceptionのサブクラスです。SQLInvalidAuthorizationSpecException SQLStateクラス値が「28」であるか、またはベンダー指定の条件下にあるときにスローされるSQLExceptionのサブクラスです。SQLNonTransientConnectionException SQLStateクラス値が「08」であるか、またはベンダー指定の条件下にあるときにスローされるSQLExceptionのサブクラスです。SQLNonTransientException SQLExceptionの原因が修正されないかぎり、同じ操作を再試行してもインスタンスが失敗するときにスローされるSQLExceptionのサブクラスです。SQLRecoverableException アプリケーションが回復ステップを実行してトランザクション全体(分散トランザクションの場合はトランザクション・ブランチ)を再試行すれば前回失敗した操作が成功する可能性があるときにスローされるSQLExceptionのサブクラスです。SQLSyntaxErrorException SQLStateクラス値が「42」であるか、またはベンダー指定の条件下にあるときにスローされるSQLExceptionのサブクラスです。SQLTimeoutException Statement.setQueryTimeout、DriverManager.setLoginTimeout、DataSource.setLoginTimeout、XADataSource.setLoginTimeoutで指定されたタイムアウトの期限が切れたときにスローされる、SQLExceptionのサブクラスです。SQLTransactionRollbackException SQLStateクラス値が「40」であるか、またはベンダー指定の条件下にあるときにスローされるSQLExceptionのサブクラスです。SQLTransientConnectionException SQLStateクラス値が「08」であるか、またはベンダー指定の条件下にあるときのための、SQLExceptionのサブクラスです。SQLTransientException 前回失敗した操作が、アプリケーション・レベルの機能による介入がなくても再試行時に成功する可能性がある状況では、SQLExceptionのサブクラスがスローされます。SQLWarning データベース・アクセスの警告に関する情報を提供する例外です。