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 MySQL事務/ INSERT IGNORE和ON DUPLICATE KEY UPDATE
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,還是我在做一些非常錯誤的事情?我在這裏先向您的幫助表示感謝。
什麼版本的MySQL您使用的是?插入和更新的邏輯只是有點令人困惑,因爲它只是一個代碼示例? :-) –