0324

MySQL事务:
四个特性。P630
事务执行成功应提交:
显式提交:commit;
自动提交:执行DDL或DCL语句,或程序正常退出。
执行失败应回滚:
显式:rollback;
自动:系统出错或强行退出。
命令行:
begin; #临时开始事务
insert into student_table #插入3条记录
values (null,'xx',1);
insert into student_table
values (null,'yy',1);
insert into student_table
values (null,'zz',1);
select * from student_table; #看到记录已经出入表中,不过这时候再开一个窗口就看不到(隔离性)
rollback; #刚才做的都撤销
select * from student_table; #那3条又没了。 上一行rollback换成commit就一直有。
savepoint a;设置事务中间点;
rollback to a; 回滚到中间点。
调用Connection的setAutoCommit()方法
con.setAutoCommint(false);关闭自动提交,即开启事务。
boolean getAutoCommit();返回该连接的自动提交模式
commit();
rollback();
Savepoint setSavepoint();
Savepoint setSavepoint(String name);
rollback(Savepoint savepoint);
如果遇到未处理的SQLException,就回非正常退出,自动rollback。

下列代码没有rollback代码,因为异常自动rollback。

import java.sql.*;
import java.io.*;
import java.util.*;
public class TransactionTest
{
private String driver;
private String url;
private String user;
private String pass;
public void initParam(String paramFile)throws Exception
{
// 使用Properties类来加载属性文件
Properties props = new Properties();
props.load(new FileInputStream(paramFile));
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
pass = props.getProperty("pass");
}
public void insertInTransaction(String[] sqls) throws Exception
{
// 加载驱动
Class.forName(driver);
try(
Connection conn = DriverManager.getConnection(url , user , pass))
{
// 关闭自动提交,开启事务
conn.setAutoCommit(false);
try(
// 使用Connection来创建一个Statment对象
Statement stmt = conn.createStatement())
{
// 循环多次执行SQL语句
for (String sql : sqls)
{
stmt.executeUpdate(sql);
}
}
// 提交事务
conn.commit();
}
}
public static void main(String[] args) throws Exception
{
TransactionTest tt = new TransactionTest();
tt.initParam("mysql.ini");
String[] sqls = new String[]{
"insert into student_table values(null , 'aaa' ,1)",
"insert into student_table values(null , 'bbb' ,1)",
"insert into student_table values(null , 'ccc' ,1)",
// 下面这条SQL语句将会违反外键约束,
// 因为teacher_table中没有ID为5的记录。
"insert into student_table values(null , 'ccc' ,5)" //①
};
tt.insertInTransaction(sqls);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值