java MySQL事务/插入忽略和重复密钥更新

java MySQL事务/插入忽略和重复密钥更新,java,mysql,sql,transactions,insert,Java,Mysql,Sql,Transactions,Insert,这是我在我的一个应用程序中使用的代码的简化版本。应用程序本身是用java编写的,并连接到MySQL数据库。我正在尝试创建一个具有多个insert查询的事务,这些查询使用IGNORE和ON DUPLICATE KEY UPDATE。本例中的表包含一个名为serial的列,该列被设置为主键。我遇到的问题是,我得到了: Connection con= DriverManager.getConnection("jdbc:mysql://"+ host, user, pass); Statement st

这是我在我的一个应用程序中使用的代码的简化版本。应用程序本身是用java编写的,并连接到MySQL数据库。我正在尝试创建一个具有多个insert查询的事务,这些查询使用IGNORE和ON DUPLICATE KEY UPDATE。本例中的表包含一个名为serial的列,该列被设置为主键。我遇到的问题是,我得到了:

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();

起初,我认为我在用SQL做一些错误的事情,直到我完全删除了事务,一切都正常了。。。。只是不作为一个交易,这是一个相当大的问题。知道哪里出了问题吗?司机只是简单地忽略和重复的关键还是我正在做一些可怕的错误?提前感谢您的帮助。

更改自动提交状态后创建您的声明:

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)

您使用的是什么版本的MySQL?插入和更新的逻辑是否有点混乱,因为它只是一个代码示例?:-)很好,我不知道那会有什么不同。
con.setAutoCommit(false);
Statement state = con.createStatement();