事務
1.原子性
事務是應用中不可再分的最小邏輯執行體
2.一致性
事務的執行結果必須使數據庫從一個一致性狀態變到另一個一致性狀態
3.隔離性
各個 事務的執行不干擾
4.持續性
事務一旦提交,對數據庫所做的任何改變都記錄到永久存儲器中,即保存到了物理數據庫
Java中的事務
package ch13;
import java.sql.*;
/**
* Created by Jiqing on 2016/12/26.
*/
public class TransactionTest {
private String driver;
private String url;
private String user;
private String pass;
// 初始化參數
public void initParam() {
driver = "com.mysql.jdbc.Driver";
url = "jdbc:mysql://127.0.0.1:3306/test";
user = "root";
pass = "123456";
}
public void insertInTransation(String[] sqls) throws Exception {
// 加載驅動
Class.forName(driver);
try (
Connection conn = DriverManager.getConnection(url,user,pass)) {
// 關閉自動提交
conn.setAutoCommit(false);
try(
// 使用Connection來創建一個Statement
Statement stmt = conn.createStatement()) {
for (String sql : sqls) {
stmt.executeUpdate(sql);
}
}
// 回滾
// conn.rollback();
// 提交事務
conn.commit();
}
}
public static void main(String[] args) throws Exception {
TransactionTest tt = new TransactionTest();
tt.initParam();
String[] sqls = new String[] {
"insert into student values('1','Li')",
"insert into student values('2','Zhao')",
"insert into student values('3','Ji')"
};
tt.insertInTransation(sqls);
}
}
增加回滾
package ch13;
import java.sql.*;
/**
* Created by Jiqing on 2016/12/26.
*/
public class TransactionTest {
private String driver;
private String url;
private String user;
private String pass;
// 初始化參數
public void initParam() {
driver = "com.mysql.jdbc.Driver";
url = "jdbc:mysql://127.0.0.1:3306/test";
user = "root";
pass = "123456";
}
public void insertInTransation(String[] sqls) throws Exception {
// 加載驅動
Class.forName(driver);
try (
Connection conn = DriverManager.getConnection(url,user,pass)) {
// 關閉自動提交
conn.setAutoCommit(false);
try(
// 使用Connection來創建一個Statement
Statement stmt = conn.createStatement()) {
for (String sql : sqls) {
stmt.executeUpdate(sql);
}
}
// 回滾
conn.rollback();
// 提交事務
conn.commit();
}
}
public static void main(String[] args) throws Exception {
TransactionTest tt = new TransactionTest();
tt.initParam();
String[] sqls = new String[] {
"insert into student values('4','Qian')",
"insert into student values('5','Sun')",
"insert into student values('6','Liu')"
};
tt.insertInTransation(sqls);
}
}
內容不會被保存。