3 JDBC標準のサポート
Oracle Java Database Connectivity(JDBC)ドライバは、様々なバージョンのJDBC標準機能をサポートしています。これらの機能は、oracle.jdbc
パッケージとoracle.sql
パッケージによって提供されます。これらのパッケージは、Java Development Kit (JDK)リリース8およびJava Development Kit (JDK)リリース11をサポートしています。
この章では、最新のリリースでのOracle JDBCドライバのJDBC標準サポートについて説明します。内容は次のとおりです。
3.1 JDBC 4.2標準のサポート
Oracle Database 20cのJDBCドライバでは、JDK 8を介してJDBC 4.2標準がサポートされています。この項では、今回のリリースに追加された重要なメソッドの一部を示しています。
%Large%メソッド
今回のリリースのOracle JDBCドライバでは、long
値に対応する、JDBC 4.2標準で導入された次のメソッドがサポートされています。
-
executeLargeBatch()
-
executeLargeUpdate(String sql)
-
executeLargeUpdate(String sql, int autoGeneratedKeys)
-
executeLargeUpdate(String sql, int[] columnIndexes)
-
executeLargeUpdate(String sql, String[] columnNames)
-
getLargeMaxRows()
-
getLargeUpdateCount()
-
setLargeMaxRows(long max)
これらの新しいメソッドは、java.sql.Statement
インタフェースの一部として使用できます。%Large%
メソッドは、int
値のかわりにlong
値を使用すること以外は、対応するnon-largeメソッドと同様です。たとえば、executeUpdate
メソッドはint
値として更新された行数を戻しますが、executeLargeUpdate
メソッドはlong
値として更新された行数を戻します。行数がInteger.MAX_VALUE
の値より大きい場合、アプリケーションではexecuteLargeUpdate
メソッドを使用する必要があります。
次のコードでは、executeLargeUpdate(String sql)
メソッドを使用する方法を示します。
...
Statement stmt = conn.createStatement();
stmt.executeQuery("create table BloggersData (FIRST_NAME varchar(100), ID int)");
long updateCount = stmt.executeLargeUpdate("insert into BloggersData (FIRST_NAME,ID) values('John',1)");
...
SQLTypeメソッド
今回のリリースのOracle JDBCドライバでは、SQLType
パラメータを使用する、JDBC 4.2標準で導入された次のメソッドがサポートされています。
-
setObject
setObject
メソッドでは、指定したオブジェクトに指定したパラメータの値を設定します。このメソッドは、setObject(int parameterIndex, Object x, SQLType targetSqlType, int scaleOrLength)
に似ていますが、scaleに0を仮定している点が異なります。このメソッドのデフォルト実装はSQLFeatureNotSupportedException
をスローします。void setObject(int parameterIndex, java.lang.Object x, SQLType targetSqlType) throws SQLException
-
updateObject
updateObject
メソッドでは、パラメータとして列索引を使用し、指定した列をオブジェクト値で更新します。 -
registerOutParameter
registerOutParameter
メソッドでは、JDBC型をSQLType
とするように指定したパラメータを登録します。
次のコードでは、setObject
メソッドを使用する方法を示します。
...
int empId = 100;
connection.prepareStatement("SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEES WHERE EMPNO = ?");
preparedStatement.setObject(1, Integer.valueOf(empId), OracleType.NUMBER);
...
3.2 JDBC 4.3標準のサポート
リリース19c以降のOracle Database JDBCドライバでは、JDK 10以降のバージョンを介して標準JDBC 4.3の機能をサポートしています。この項では、今回のリリースに追加された重要なメソッドの一部について説明します。
シャーディングのサポート
シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。このような構成内の各データベースをシャードと呼びます。すべてのシャードが集まったものが単一の論理データベースで、これをシャード・データベース(SDB)と呼びます。DatabaseMetaData.supportsSharding
メソッドを使用して、JDBCドライバがシャーディングをサポートしているかどうかを判断できます。
シャーディングのサポートには、次のAPIの追加が含まれます。
javax.sql.XAConnectionBuilder
インタフェースこれは
XADataSource
オブジェクトから作成されたビルダー・インタフェースで、データソース・オブジェクトが表すデータベースへの接続を確立するために使用できます。java.sql.ShardingKey
インタフェースこのインタフェースは、現在のオブジェクトがシャーディング・キーを表すことを示す場合に使用します。
ShardingKeyBuilder
インタフェースを使用してShardingKey
インスタンスを作成できます。java.sql.ShardingKeyBuilder
インタフェースこれは
DataSource
またはXADataSource
オブジェクトから作成されたビルダー・インタフェースで、サポートされるデータ型のサブキーを持つShardingKey
を作成するために使用されます。
java.sql.Connectionインタフェースの拡張機能
次のメソッドがjava.sql.Connection
インタフェースに追加されています。
default void beginRequest throws SQLException
default void endRequest throws SQLException
default void setShardingKey(ShardingKey shardingKey) throws SQLException
default void setShardingKey(ShardingKey shardingKey, ShardingKey superShardingKey) throws SQLException
default void setShardingKeyIfValid(ShardingKey shardingKey, int timeout) throws SQLException
default void setShardingKeyIfValid(ShardingKey shardingKey, ShardingKey superShardingKey, int timeout) throws SQLException
java.sql.DatabaseMetaDataインタフェースの拡張機能
次のメソッドがjava.sql.DatabaseMetaData
インタフェースに追加されています。
default boolean supportsSharding() throws SQLException
java.sql.Statementインタフェースの拡張機能
次のメソッドがjava.sql.Statement
インタフェースに追加されています。
default String enquoteIdentifier(String identifier, Boolean alwaysQuote) throws SQLException
default String enquoteLiteral(String val) throws SQLException
default String enquoteNCharLiteral(String val) throws SQLException
default boolean isSimpleIdentifier(String identifier) throws SQLException