Oracle JDBCのドキュメントには次のように書かれています:
キー列が明示的に示されていない場合、Oracle JDBCドライバーは、取得する必要のある列を識別できません。列名または列インデックス配列が使用されている場合、Oracle JDBCドライバーは、取得する自動生成されたキーが含まれている列を識別できます。ただし、
Statement.RETURN_GENERATED_KEYS
整数フラグが使用されている場合、OracleJDBCドライバはこれらの列を識別できません。自動生成されたキーが返されることを示すために整数フラグが使用される場合、ROWID
疑似列がキーとして返されます。ROWID
その後、ResultSet
からフェッチできます オブジェクトであり、他の列を取得するために使用できます。
(サンプルコードに示されているように)列を指定していないため、ROWID
を取得しています。; getInt()
でそれを取得しようとしています 表示されるエラーの原因です。 (実際には、Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
しかし、それは別のドライバーバージョンによるものだと思います。
自動生成された値を取得する列を指定する必要があります。 MEETING_ID
と呼ばれる場合 次に、次のようにします:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... RETURN_GENERATED_KEYSフラグではなく、列の配列(この場合は1つのみ)を渡します。
rs.getInt(1)
その後、その数値を取得します。