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