sql >> データベース >  >> RDS >> Oracle

無効な変換がエラーコード:17132を要求したのはなぜですか?

    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) その後、その数値を取得します。




    1. UPDATEステートメントの影響を受ける行数を返します

    2. INNER JOIN ONvsWHERE句

    3. MySQLで「存在しない場合は挿入」するにはどうすればよいですか?

    4. SQLiteの結果をJSONとしてフォーマットする