ojdbc6 を JDBC ドライバーとして使用して、Oracle 11g データベースに接続するアプリケーションを開発しています。値を追加する必要があるテーブルのトリガーとシーケンスを作成して、そのテーブルの ID 列が自動インクリメントされるようにしました。SQL Developer を使用してデータベースに新しい行を手動で追加すると、すべて正常に動作します (自動インクリメントのシーケンスとトリガーはうまく機能します)。しかし、Java アプリケーションから新しい行を追加しようとすると、次のエラーが発生します。
java.sql.SQLRecoverableException: oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePre paredStatement.java:3071) での内部エラー oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(または aclePreparedStatement.java:2247) で.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3444) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(Oracl ePreparedStatementWrapper.java:1350)
これは私のJavaコードです:
String query = "INSERT INTO USER (ID, USERNAME, PASSWORD, FIRSTNAME, LASTNAME, EMAIL) VALUES (?, ?, ?, ?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(2, user.getUsername());
preparedStatement.setString(3, user.getPassword());
preparedStatement.setString(4, user.getFirstName());
preparedStatement.setString(5, user.getFirstName());
preparedStatement.setString(6, user.getEmail());
preparedStatement.executeUpdate();
すべてがsqldevelopperで正常に動作するため、問題がデータベースから発生するとは思わないため、シーケンスとトリガーのコードを追加しませんでした。また、次のように、シーケンスを直接使用しようとしました:
String query = "INSERT INTO USER (ID, USERNAME, PASSWORD, FIRSTNAME, LASTNAME, EMAIL) VALUES (SEQUENCE.NEXTVAL, ?, ?, ?, ?, ?)";
でもそれも失敗
誰かがそれを修正するのを手伝ってくれますか?