轉自:http://blog.csdn.net/fafeiboy/article/details/2734889
在與資料庫操作時,如果執行多條更新的SQL語句(如:update或insert語句),在執行第一條後如果出現異常或電腦斷電,
則後面的SQL語句執行不了,這時候設定我們自己提交SQL語句,不讓JDBC自動提交,格式為:
conn.setAutoCommit(false);
執行多條SQL語句;
conn.commit();
//恢復自動提交模式
conn.setAutoCommit(true);
程式碼示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestTransaction {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydb", "root", "root");
System.out.println("連線資料庫成功!");
stmt = con.createStatement();
// JAVA預設為TRUE,我們自己處理需要設定為FALSE,並且修改為手動提交,才可以呼叫rollback()函式
con.setAutoCommit(false);
stmt.addBatch("insert into people values(078,'ding','duo')");
stmt.addBatch("insert into people values(30,'nokia','ddd')");
stmt.executeBatch();
// 事務提交
con.commit();
// 設定為自動提交,改為TRUE
con.setAutoCommit(true);
/*
* String sql = "select * from people"; rs = stmt.executeQuery(sql);
* while(rs.next()){ System.out.println(rs.getString("id") + " " +
* rs.getString("name")); }
*/
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException se) {
se.printStackTrace();
try {
// 產生的任何SQL異常都需要進行回滾,並設定為系統預設的提交方式,即為TRUE
if (con != null) {
con.rollback();
con.setAutoCommit(true);
}
} catch (SQLException se1) {
se.printStackTrace();
}
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (con != null) {
con.close();
con = null;
}
} catch (SQLException se) {
se.printStackTrace();
}
}
}
}