![]() ![]() ![]() ![]() |
以下の節では、BEA WebLogic Type 4 JDBC Oracle ドライバのコンフィグレーション方法と使用方法について説明します。
DataDirect Connect for JDBC Oracle ドライバ (「Oracle ドライバ」) は次のバージョンをサポートします。
BEA WebLogic Type 4 JDBC Oracle ドライバのドライバ クラスは次のとおりです。
WebLogic Server ドメインに JDBC データ ソースをコンフィグレーションする場合に、これらのドライバ クラスを使用します。
Oracle データベースに接続するには、次の形式の URL を使用します。
jdbc:bea:oracle://
dbserver
:
port
表 6-1 に、Oracle ドライバでサポートされる JDBC 接続プロパティを示し、各プロパティについて説明します。WebLogic Server ドメインの JDBC データ ソースのコンフィグレーションでこれらの接続プロパティを使用できます。プロパティを指定するには、JDBC データ ソースのコンフィグレーションで次の形式を使用します。
property=value
すべての接続プロパティ名で大文字と小文字は区別されません。たとえば、Password は password と同じです。必須のプロパティかどうかが記載されています。
|
|
|
|
|
|
|
以下に示す Oracle ドライバの接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。
ドライバは JDBC 3.0 に準拠したバッチ メカニズムまたはネイティブの Oracle バッチ メカニズムを使用して、バッチ処理を実行できます。アプリケーションが更新件数情報を使用しない場合は、ネイティブの Oracle バッチ環境を使用するとパフォーマンスが向上します。JDBC 3.0 に準拠したメカニズムでは、JDBC 3.0 仕様で求められているように、バッチ内の文やパラメータごとの更新件数が返されます。ネイティブの Oracle バッチ メカニズムでは、バッチ内の文やパラメータごとの更新件数は返されません。このため、ネイティブの Oracle バッチ メカニズムを使用する場合は、更新件数配列で SUCCESS_NO_INFO (-2) の値が返されます。
Oracle では、シノニムおよびアノテーション情報の取得は非常に負荷の高い処理です。アプリケーションでこれらの情報を返す必要がない場合は、ドライバのパフォーマンスを向上させることができます。JDBC における標準の動作では、DatabaseMetaData メソッドの getColumns()
、getProcedures()
、getProcedureColumns()
、および getIndexInfo()
から返される結果セットにシノニムが含まれます。ドライバはこれに加えて、DatabaseMetaData メソッドの getTables()
および getColumns()
から返される結果セットにアノテーション情報を含めることができます。
スクロールインセンシティブな結果セットを使用する場合のパフォーマンスを向上させるため、ドライバは結果セット データをディスクに書き込む代わりに、メモリにキャッシュできます。デフォルトでは、ドライバはインセンシティブな結果セット データを 2 MB までメモリにキャッシュし、残りの結果セット データをディスクに書き込みます。パフォーマンスを向上させるには、ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込めないようにします。最大キャッシュ サイズの設定は 2 GB です。
ドライバがアプリケーション サーバの内部で実行されない場合、または独自のプリペアド ステートメント プールを提供しない別のアプリケーションの内部で実行されるのでない場合は、パフォーマンスを向上させるため、ドライバ独自の内部的なプリペアド ステートメント プールを有効にする必要があります。ドライバの内部的なプリペアド ステートメント プールを有効にすると、ドライバはアプリケーションによって作成された一定数のプリペアド ステートメントをキャッシュします。たとえば、MaxPooledStatements
が 20 に設定されている場合、ドライバはアプリケーションによって作成された最近の 20 個のプリペアド ステートメントをキャッシュします。このプロパティの値に設定された値が、アプリケーションが使用するプリペアド ステートメントの数より大きい場合は、すべてのプリペアド ステートメントがキャッシュされます。
デフォルトでは、ResultSetMetaData.getTableName()
メソッドが呼び出された場合、Oracle ドライバは、結果セット内の各カラムの正しいテーブル名を返すために必要な追加の処理を省略します。このため、getTableName()
メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。アプリケーションでテーブル名情報が必要ない場合は、この設定によって最適なパフォーマンスが得られます。
ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。
専用サーバ接続を使用する場合、UNIX のサーバ プロセス (Windows におけるスレッド) は、そのアプリケーション接続専用として作成されます。このプロセスは、接続を切断すると終了します。ソケット接続は、アプリケーションと、この専用サーバ プロセスとの間で直接確立されます。これにより、パフォーマンスは大幅に向上しますが、消費される UNIX サーバのリソースも著しく増加します。Windows プラットフォームで動作する Oracle サーバの場合、UNIX のプロセスに該当するのはスレッドであるため、サーバ上で追加消費されるリソース量は UNIX に比べて大幅に低く抑えられます。ServerType プロパティを Dedicated に設定する必要があるのは、バッチ環境で接続数が比較的少ない場合か、最大の負荷がかかっている状態でも Oracle サーバの処理能力とメモリ容量に余裕がある場合か、または Oracle リソースを他のアプリケーションと共有するとパフォーマンスが低下するパフォーマンス重視のアプリケーションを使用している場合です。
連続する複数の行の繰り返しデータを返すことが多い場合は、ドライバのパフォーマンスを向上させることができます。これはたとえば、カラム 1/行 1 のデータがカラム 1/行 2 のデータと同じというような場合です。「WireProtocolMode」を参照してください。
tnsnames.ora
ファイルは、各 Oracle サービスの接続情報を論理エリアスにマップするために使用します。Oracle ドライバを使用すると、tnsnames.ora
ファイルから以下のような基本的な接続情報を取得できます。
tnsnames.ora
ファイルでは、Oracle サービスの接続情報がエリアス (Oracle ネット サービス名) に関連付けられています。ネット サービス名の各エントリには、リスナやサービスの情報を定義する記述子が含まれています。コード リスト 6-1 に、ネット サービス名エントリである FITZGERALD.SALES および ARMSTRONG.ACCT をコンフィグレーションした tnsnames.ora
ファイルの接続情報の例を示します。
FITZGERALD.SALES =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
(CONNECT_DATA =
(SID = ORCL)
)
)
ARMSTRONG.ACCT =
(DESCRIPTION =
(ADDRESS_LIST=
(FAILOVER = on)
(LOAD_BALANCE = on)
(ADDRESS= (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
(ADDRESS= (PROTOCOL = TCP)(HOST = server2)(PORT = 1521))
(ADDRESS= (PROTOCOL = TCP)(HOST = server3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = acct.us.yourcompany.com)
)
)
この例では、Oracle ドライバが Oracle ネット サービス名エントリ FITGERALD.SALES を参照する場合、ドライバは Oracle SID ORCL (SID=ORCL
) に指定されている Oracle データベース インスタンスに接続します。同様に、Oracle ドライバが ARMSTRONG.ACCT を参照する場合は、サービス名 acct.us.yourcompany.com (SERVICE_NAME=acct.us.yourcompany.com
) に指定されている Oracle データベースに接続します。また、ドライバにより接続のフェイルオーバ (FAILOVER=on
) とクライアントのロード バランシング (LOAD_BALANCE=on
) が有効になります。
tnsnames.ora
ファイルは、通常は Oracle データベースのインストール時にインストールされています。デフォルトでは、tnsnames.ora
ファイルは、ORACLE_HOME\network\admin
ディレクトリ (Windows の場合) または $ORACLE_HOME/network/admin
ディレクトリ (UNIX の場合) にあります。
Oracle ドライバで Oracle tnsnames.ora ファイルから接続情報を取得するには、どの tnsnames.ora ファイル (TNSNamesFile
プロパティで指定) と、どの Oracle サービス名エントリ (TNSServerName
プロパティで指定) を使用して接続情報を参照するかを指定する必要があります。次に例を示します。
<JDBCConnectionPool
DriverName="weblogic.jdbc.oracle.OracleDriver"
Name="myDriver"
PasswordEncrypted="{3DES}r8a+P5qIVJzgiWQDTAN/OA=="
Properties="TNSServerName=myTNSServerName;user=user;TNSNamesFile=/usr/local/network/admin/tnsnames.ora"
Targets="myserver"
TestConnectionsOnReserve="true"
TestTableName="SQL SELECT 1 FROM DUAL"
URL="jdbc:bea:oracle:TNSNamesFile=/usr/local/network/admin/tnsnames.ora"
XAPasswordEncrypted="" />
この URL では、接続に使用する tnsnames.ora
ファイルのパスとファイル名 (jdbc:bea:oracle:TNSNamesFile=/usr/local/network/admin/tnsnames.ora
)、およびネット サービス名エントリ (TNSServerName=myTNSServerName
) が指定されています。
注意 : |
tnsnames.ora ファイルと Java 2 のセキュリティ マネージャを併用する場合は、tnsnames.ora ファイルに読み込みパーミッションを付与する必要があります。例については、「Oracle tnsnames.ora ファイルへのアクセス パーミッションの付与」を参照してください。
tnsnames.ora
ファイルを使用して接続情報を取得する場合は、接続情報の衝突を防ぐため、以下の接続プロパティは指定しないようにしてください。
TNSNamesFile
および TNSServerName
プロパティに加えて、上記のいずれかのプロパティが指定されている場合は、ドライバが例外を生成します。
表 6-2 に、Oracle ドライバ プロパティと tnsnames.ora 接続記述子パラメータの対応を示します。tnsnames.ora
ファイルを使用する場合は、接続情報の衝突を防ぐため、表に示すドライバ プロパティは使用しないでください。
tnsnames.ora ファイルのコンフィグレーションの詳細については、Oracle のドキュメントを参照してください。
表 6-3 に、Oracle ドライバでサポートされるデータ型と、それらが JDBC データ型へどのようにマップされるかを示します。
データ型の詳細については、「getTypeInfo」を参照してください。
Oracle9i 以降では、日付および時刻のデータ型である TIMESTAMP、TIMESTAMP WITH LOCAL TIME ZONE、および TIMESTAMP WITH TIME ZONE がサポートされます。Oracle ドライバがこれらのデータ型をどのようにサポートしているかを理解するには、まず、Oracle ドライバが Oracle の日付および時刻のセッション パラメータに割り当てている値を理解しておく必要があります。
接続時には、Oracle ドライバが以下の日付および時刻のセッション パラメータを設定します。
Oracle の TIMESTAMP
データ型は JDBC の TIMESTAMP
データ型にマップされます。
Oracle の TIMESTAMP WITH LOCAL TIME ZONE
データ型は TIMESTAMP
JDBC データ型にマップされます。
TIMESTAMP WITH LOCAL TIME ZONE
のカラムを取得する場合、ユーザに返される値は TIME_ZONE
セッション パラメータで指定されるタイム ゾーンに変換されます。
TIMESTAMP WITH LOCAL TIME ZONE
のカラムを設定する場合、
PreparedStatement.setTimestamp
を使用する) と、設定される値は TIME_ZONE
セッション パラメータで指定されたタイム ゾーンに変換される。 PreparedStatement.setString
を使用する) と、文字列はそのままでサーバに渡される。指定する文字列は、NLS_TIMESTAMP_TZ_FORMAT
セッション パラメータで指定された形式でなければなりません。その形式でない場合、文字列を TIMESTAMP WITH LOCAL TIME ZONE
型に変換しようとすると、Oracle サーバはエラーを生成します。
デフォルトでは、Oracle の TIMESTAMP WITH TIME ZONE
データ型は VARCHAR
JDBC データ型にマップされます。
TIMESTAMP WITH TIME ZONE
値を文字列として取得する (たとえば、resultSet.getString
を使用する) 場合、その値は、タイム ゾーン情報を含むタイムスタンプの文字列表現として返されます。文字列情報の形式は、Oracle の NLS_TIMESTAMP_TZ_FORMAT
セッション パラメータで指定された形式になります。
データベースに格納されたタイム ゾーン情報は、データがタイムスタンプに変換されるときに失われるため、デフォルトでは、TIMESTAMP WITH TIME ZONE
値をタイムスタンプとして取得する (たとえば、resultSet.getTimeStamp
を使用する) ことはサポートされていません。既存のアプリケーションとの下位互換性を保つために、FetchTSWTZasTimestamp
プロパティを使用して、TIMESTAMP WITH TIME ZONE
値をタイムスタンプとして取得することができます。FetchTSWTSasTimestamp
プロパティのデフォルト値は false です。false の場合は TIMESTAMP WITH TIME ZONE
値をタイムスタンプとして取得できません。
TIMESTAMP WITH TIME ZONE
のカラムを設定する場合、
PreparedStatement.setTimestamp
を使用する) と、設定される値は TIME_ZONE
セッション パラメータで指定されたタイム ゾーンに変換される。 PreparedStatement.setString
を使用する) と、文字列はそのままでサーバに渡される。指定する文字列は、NLS_TIMESTAMP_TZ_FORMAT
セッション パラメータで指定された形式でなければなりません。その形式でない場合、文字列を TIMESTAMP WITH TIME ZONE
型に変換しようとすると、Oracle サーバはエラーを生成します。
Oracle ドライバは、Oracle9i 以降で XMLType
として指定されたカラムを含むテーブルをサポートします。Oracle の XMLType
データ型は JDBC CLOB データ型にマップされます。XMLType
カラムは他のカラム型と同様にクエリで使用できます。XMLType
カラムのデータは String
、Clob
、CharacterStream
、または AsciiStream
として取得できます。XMLType
カラムを挿入または更新する場合、挿入または更新されるカラムは XMLType
データ型の形式でなければなりません。
Oracle には、XMLType
データ オブジェクトを作成するための xmltype()
関数があります。xmltype()
関数の xmlData
引数は、文字列リテラルまたはパラメータ マーカとして指定できます。パラメータ マーカを使用する場合、パラメータ値は setString
、setClob
、setCharacterStream
、または setAsciiStream
メソッドを使用して設定できます。
次のコードでは、xmltype()
関数の xmlData
引数として文字列リテラルを指定した文を使用して、XMLType
カラムにデータを挿入します。
// xml データをリテラルとして挿入する
String sql = "insert into XMLTypeTbl values (1, xmltype('" +
"<emp><empNo>123</empNo><empName>Mark</empName></emp>'))";
Statement stmt = con.createStatement();
stmt.executeUpdate(sql);
次のコードでは、プリペアド ステートメントを使用して XMLType
カラムにデータを挿入します。
// xml データを文字列パラメータとして挿入する
String xmlStr =
"<emp><empNo>234</empNo><empName>Trish</empName></emp>";
String sql = "insert into XMLTypeTbl values (?, xmltype(?))";
PreparedStatement prepStmt = con.prepareStatement(sql);
prepStmt.setInt(1, 2);
prepStmt.setString(2, xmlStr);
prepStmt.executeUpdate();
XMLType
カラムのデータを Clob
として取得する場合、その Clob
オブジェクトを使用して XMLType
データを更新することはできません。XMLType
カラムから返された Clob
オブジェクトの setString
、setCharacterStream
、または setAsciiStream
メソッドを呼び出すと、SQLException が生成されます。
REF CURSOR
は、カーソル変数用の Oracle データ型です。JDBC はカーソル変数データ型をサポートしていないため、Oracle ドライバでは REF CURSOR
出力パラメータを返し、値を結果セットとしてアプリケーションに返します。Oracle ドライバは、REF CURSOR
データを自動的に結果セットに変換します。結果セットは、getResultSet
または getMoreResults
で取得できます。REF CURSOR
データが出力パラメータではなく結果セットとして返されるため、DatabaseMetaData.getProcedureColumns
呼び出しの結果には REF CURSOR
出力パラメータは含まれません。
作成するアプリケーションでは、以下の例に示すように、REF CURSOR
のパラメータ マーカは省略し、REF CURSOR
の出力パラメータを宣言しないようにしてください。これらの例では、次のストアド プロシージャ定義を参照しています。
CREATE PACKAGE foo_pkg AS
TYPE EmpCurTyp IS REF CURSOR RETURN fooTbl%ROWTYPE;"
PROCEDURE selectEmployeeManager(empId IN INT, empCursor OUT
EmpCurTyp,
mgrCursor out EmpCurTyp);
FUNCTION selectEmployee2 (empId IN INT) return EmpCurTyp;
END foo_pkg;
// 入力パラメータを受け付ける関数を呼び出し、
// 戻り値として REF CURSOR を返す。refcursor 戻り値
// パラメータのプレースホルダは省略する。
// REF CURSOR は結果セットとして返される
sql = "{call foo_pkg.selectEmployee2(?)}";
callStmt = con.prepareCall(sql);
callStmt.setInt(1, 2);
moreResults = callStmt.execute();
while (true) {
if (moreResults) {
// REF CURSOR を表す結果セットを取得する
resultSet = callStmt.getResultSet();
displayResults(resultSet);
resultSet.close();
resultSet = null;
System.out.println();
}
else {
updateCnt = callStmt.getUpdateCount();
if (updateCnt == -1) {
break;
}
System.out.println("Update Count: " + updateCnt);
}
moreResults = callStmt.getMoreResults();
}
// 入力パラメータを受け付けるストアド プロシージャを呼び出し、
// 2 つの REF CURSOR を返す。REF CURSOR パラメータのプレースホルダは
// 省略する。REF CURSOR は結果セットとして
// 返される
sql = "{call foo_pkg.selectEmployeeManager(?)}";
callStmt = con.prepareCall(sql);
callStmt.setInt(1, 2);
moreResults = callStmt.execute();
while (true) {
if (moreResults) {
// REF CURSOR を表す結果セットを取得する
resultSet = callStmt.getResultSet();
displayResults(resultSet);
resultSet.close();
}
else {
updateCnt = callStmt.getUpdateCount();
if (updateCnt == -1) {
break;
}
}
moreResults = callStmt.getMoreResults();
}
ドライバが Oracle サーバとの通信に使用するコード ページを制御するには、CodePageOverride
プロパティを使用します。このプロパティで指定されたコード ページは、ドライバが文字データをデータベース文字セットに変換するために使用するコード ページをオーバーライドします。このオプションの設定は、ドライバが文字データを国別文字セットに変換する方法には影響しません。
表 6-4 に、文字セットの変換に使用できる各オプションの詳細を示します。
Oracle ドライバでサポートされている SQL エスケープ シーケンスについては、「JDBC の SQL エスケープ シーケンス」を参照してください。
Oracle ドライバは、アイソレーション レベルとして Read Committed
および Serializable
をサポートしています。デフォルトは Read Committed
です。
Oracle ドライバは、スクロールセンシティブな結果セット、スクロールインセンシティブな結果セット、および更新可能な結果セットをサポートしています。
注意 : | Oracle ドライバが、要求された結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入った SQLWarning を生成します。 |
Oracle ドライバは、バッチ処理をサポートするための 2 つのメカニズムを備えています。
BatchPerformanceWorkaround
プロパティによって、使用するバッチ メカニズムが決まります。BatchPerformanceWorkaround
プロパティの値が true の場合はネイティブの Oracle バッチ メカニズムが使用されます。それ以外の場合は JDBC 3.0 に準拠したメカニズムが使用されます。BatchPerformanceWorkaround
プロパティのデフォルト値は false です。
Oracle ドライバでは、この節で説明するようにパラメータ メタデータを返すことができます。
Oracle ドライバは、以下の形式の Insert 文および Update 文のパラメータ メタデータを返すことができます。
ここで、operator
は SQL 演算子 (=、<、>、<=、>=、または <>) です。
Oracle ドライバでは、ANSI SQL 92 エントリレベルの述語 (比較、BETWEEN、IN、LIKE、EXISTS などの述語構文) にパラメータを含んでいる Select 文に対してパラメータ メタデータを返すことができます。詳細な構文については、ANSI SQL リファレンスを参照してください。
以下のいずれかの条件に該当する場合は、Select 文に対してパラメータ メタデータを返すことができます。
以下の Select 文では、パラメータ メタデータを返すことができる例をさらに示しています。
SELECT col1, col2 FROM foo WHERE col1 = ? and col2 > ?
SELECT ... WHERE colname = (SELECT col2 FROM t2 WHERE col3 = ?)
SELECT ... WHERE colname LIKE ?
SELECT ... WHERE colname BETWEEN ? and ?
SELECT ... WHERE colname IN (?, ?, ?)
SELECT ... WHERE EXISTS(SELECT ... FROM T2 WHERE col1 < ?)
GROUP BY、HAVING、または ORDER BY を含む WHERE 句で ANSI SQL 92 エントリレベルの述語を使用する文がサポートされます。次に例を示します。
SELECT * FROM t1 WHERE col = ?ORDER BY 1
SELECT * FROM t1,t2 WHERE t1.col1 = ?
SELECT a, b, c, d FROM T1 AS A, T2 AS B WHERE A.a = ? and B.b = ?"
アプリケーションでテーブル名情報が必要な場合、Oracle ドライバは Select 文の ResultSet メタデータに含めてテーブル名情報を返すことができます。ResultSetMetaDataOptions
プロパティを 1 に設定した場合、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、Oracle ドライバは結果セット内の各カラムの正しいテーブル名を決定する追加の処理を実行します。それ以外の場合、getTableName()
メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。
ResultSetMetaDataOptions
プロパティが 1 に設定されていて、ResultSetMetaData.getTableName()
メソッドが呼び出された場合、Oracle ドライバが返すテーブル名情報は、結果セット内のカラムがデータベース テーブル内のカラムにマップされているかどうかによって異なります。結果セット内の各カラムがデータベース テーブル内のカラムにマップされている場合、Oracle ドライバはそのカラムに関連付けられているテーブル名を返します。結果セット内の各カラムがテーブル内のカラムにマップされていない場合 (集約やリテラルなど)、Oracle ドライバは空の文字列を返します。
ResultSet メタデータが返される Select 文には、エリアス、結合、および完全修飾名を含めることができます。以下のクエリは、ResultSetMetaData.getTableName()
メソッドによって Select
リスト内の各カラムの正しいテーブル名が返される、Select
文の例です。
SELECT id, name FROM Employee
SELECT E.id, E.name FROM Employee E
SELECT E.id, E.name AS EmployeeName FROM Employee E
SELECT E.id, E.name, I.location, I.phone FROM Employee E, EmployeeInfo I
WHERE E.id = I.id
SELECT id, name, location, phone FROM Employee, EmployeeInfo WHERE id =
empId
SELECT Employee.id, Employee.name, EmployeeInfo.location,
EmployeeInfo.phone FROM Employee, EmployeeInfo WHERE Employee.id =
EmployeeInfo.id
生成されたカラムの場合、ドライバによって返されるテーブル名は空の文字列です。以下のクエリは、生成されたカラム (「upper」という名前のカラム) を含む結果セットを返す Select 文の例です。
SELECT E.id, E.name as EmployeeName, {fn UCASE(E.name)}
AS upper FROM Employee E
Oracle ドライバは、ResultSetMetaData.getSchemaName()
メソッドと ResultSetMetaData.getCatalogName()
メソッドが呼び出された場合、スキーマ名とカタログ名の情報を返すこともできます (ドライバがこの情報を判別できる場合)。たとえば、以下の文の場合、Oracle ドライバはカタログ名として「test」、スキーマ名として「test1」、テーブル名として「foo」を返します。
SELECT * FROM test.test1.foo
テーブル名、スキーマ名、およびカタログ名の情報を返すために必要な追加の処理は、ResultSetMetaData.getTableName()
、ResultSetMetaData.getSchemaName()
、または ResultSetMetaData.getCatalogName()
メソッドが呼び出された場合にのみ実行されます。
Oracle ドライバは、以下のような RowSet インタフェースの JSR 114 実装をサポートします。
JSR 114 の詳細については、 http://www.jcp.org/en/jsr/detail?id=114 を参照してください。
Oracle ドライバは自動生成キーの値の取得をサポートします。Oracle ドライバから返される自動生成キーは、ROWID 擬似カラムの値です。
値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。
Insert
文を使用する場合、Oracle ドライバは次の形式の Statement.execute
メソッドおよび Statement.executeUpdate
メソッドをサポートする。これらのメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。 Insert
文を使用する場合、Oracle ドライバは次の形式の Connection.prepareStatement
メソッドをサポートする。このメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。 Connection.prepareStatement (String sql, int autoGeneratedKeys)
アプリケーションでは Statement.getGeneratedKeys
メソッドを使用して、生成されたキーの値をドライバから取得します。
![]() ![]() ![]() |