Connection con= DriverManager.getConnection("jdbc:mysql://"+ host, user, pass);
Statement state = con.createStatement();
con.setAutoCommit(false);
state.executeUpdate("INSERT IGNORE `kb_manage`.`serial` (`serial`) VALUES ('10001')");
state.executeUpdate("INSERT `kb_manage`.`serial` (`serial`) VALUES ('10001') ON
DUPLICATE KEY UPDATE `serial`='10002'");
con.commit();这是我在我的一个应用程序中使用的代码的简化版本。应用程序本身是用java编写的,并连接到MySQL数据库。我正在尝试创建一个事务,该事务具有多个insert查询,这些查询利用了IGNORE和ON DUPLICATE KEY UPDATE.The表,在此示例中,表包含名为serial的1列,该列被设置为主键。我的问题是我得到了一个:
java.sql.SQLException: DUP_PK_KEY
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618)
at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1654)
at remote.SerialValue.main(SerialValue.java:19)起初,我认为我在SQL上做了一些错误的事情,直到我完全删除了事务,一切都正常了……只是不是作为一个交易,这是一个相当大的问题。你知道哪里出了问题吗?是驱动程序简单地忽略了重复键上的忽略和,还是我做了一些非常错误的事情?提前感谢您的帮助。
发布于 2012-09-06 23:06:03
在更改autoCommit状态后创建语句:
con.setAutoCommit(false);
Statement state = con.createStatement();https://stackoverflow.com/questions/12302771
复制相似问题