我正在开发一个连接到 Oracle 11g 数据库的应用程序,使用 ojdbc6 作为 JDBC 驱动程序。我为需要添加值的表创建了一个触发器和一个序列,以便该表的 ID 列自动递增。当我使用 SQL Developper 在数据库中手动添加新行时,一切正常(我的自动增量序列和触发器工作良好)。但是当我从 Java 应用程序中添加新行时,我收到以下错误:
java.sql.SQLRecoverableException: internal error at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePre paredStatement.java:3071) at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(Or aclePreparedStatement.java:2247) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePrep aredStatement.java:3444) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePrepar edStatement.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, ?, ?, ?, ?, ?)";
但这也失败了
有人可以帮我解决这个问题吗?
最佳答案
不要从客户端发送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();
关于java - oracle11g 和 JDBC 中的自动增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18284049/