0

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, ?, ?, ?, ?, ?)";

でもそれも失敗

誰かがそれを修正するのを手伝ってくれますか?

4

3 に答える 3

2

IDクライアントから を送信しないでください。トリガーに次を処理させIDます。

String query = "INSERT INTO USER (USERNAME, PASSWORD, FIRSTNAME, LASTNAME, EMAIL)"
  + " VALUES (?, ?, ?, ?, ?)";

PreparedStatement preparedStatement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, user.getUsername());
preparedStatement.setString(2, user.getPassword());
preparedStatement.setString(3, user.getFirstName());
preparedStatement.setString(4, user.getFirstName());
preparedStatement.setString(5, user.getEmail());

preparedStatement.executeUpdate();
于 2013-08-17T03:11:54.843 に答える