使用事务更新MySQL中的多个表

时间:2016-01-15 08:49:59

标签: java mysql sql

在java中,如果我想在与事务相同的数据库的多个表中插入数据,那么我应该使用相同的连接还是为每个表创建连接?

datatable

insertInTable(){

insetInTable1();
insertInTable2()

}

insetInTable1(){
//get new connection , insert commit
}

insetInTable2(){
//get new connection , insert commit
}

假设两个表都在同一个数据库中。

可以跨方法发送相同的连接吗?

2 个答案:

答案 0 :(得分:1)

您可以使用带参数的 storedprocedure mysql ...并在开始交易

中插入所有代码

另外,您可以使用此代码 JDBC

dbConnection.setAutoCommit(false); //transaction block start

String insertTableSQL = "INSERT INTO DBUSER"
            + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
            + "(?,?,?,?)";

String updateTableSQL = "UPDATE DBUSER SET USERNAME =? "
            + "WHERE USER_ID = ?";

preparedStatementInsert = dbConnection.prepareStatement(insertTableSQL);
preparedStatementInsert.setInt(1, 999);
preparedStatementInsert.setString(2, "mkyong101");
preparedStatementInsert.setString(3, "system");
preparedStatementInsert.setTimestamp(4, getCurrentTimeStamp());
preparedStatementInsert.executeUpdate(); //data IS NOT commit yet

preparedStatementUpdate = dbConnection.prepareStatement(updateTableSQL);
preparedStatementUpdate.setString(1, "A very very long string caused DATABASE ERROR"); 
preparedStatementUpdate.setInt(2, 999);
preparedStatementUpdate.executeUpdate(); //Error, rollback, including the first insert statement.

dbConnection.commit(); //transaction block end

答案 1 :(得分:1)

绝对是后者,即由单个begin / commit包围的两个insert语句。您无法在多个连接之间保留事务。

......好吧,有可能使用Open-XA但很难从常规Java代码管理,无论如何这里没有任何意义。