在java中,如果我想在与事务相同的数据库的多个表中插入数据,那么我应该使用相同的连接还是为每个表创建连接?
datatable
或
insertInTable(){
insetInTable1();
insertInTable2()
}
insetInTable1(){
//get new connection , insert commit
}
insetInTable2(){
//get new connection , insert commit
}
假设两个表都在同一个数据库中。
可以跨方法发送相同的连接吗?
答案 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代码管理,无论如何这里没有任何意义。