0
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 数据库。我正在尝试创建一个事务,该事务具有多个使用 IGNORE 和 ON DUPLICATE KEY UPDATE 的插入查询。此示例中的表包含 1 个名为 serial 的列,该列设置为 PRIMARY KEY。我遇到的问题是我得到了:

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 上做错了什么,直到我完全删除了事务并且一切正常......只是不是作为一个相当有问题的事务。知道出了什么问题吗?驱动程序是否只是忽略 IGNORE 和 ON DUPLICATE KEY 还是我做错了什么?我在这里先向您的帮助表示感谢。

4

1 回答 1

1

在更改您的 autoCommit 状态后创建您的语句:

con.setAutoCommit(false);
Statement state = con.createStatement();
于 2012-09-06T15:06:03.230 回答