以前很不理解回滚这个东西,现在突然明白了,通过这个例子
通过一个dao 和一个service层来实现
创建数据库
create table money(name varchar(20),qian int(20));
insert into money(name,qian)values('zs',1000);
insert into money(name,qian)values('ls',1000);
Dao层实现转账功能 类名: AccountDao
因为一个事物 只能通过一个Connection 对象,所以我们这儿将Connection 作为一个参数传进
public void zhuanzhang(Connection conn,String name,int qian){
String sql = "update money set qian =qian+? where name=?"
PrepareStatement pro = conn.prepareStatement(sql);
pro.setInt(1,qian);
pro.setString(2,name);
int index = pro.executeUpdate();
/*这儿如果出错,那么返回的结果是一个0,求大神写下更简单的方法,我在这儿抛出一个异常
在service 层可以捕获到
*/
if(index==0){
throw new RuntimeException("错误");
}
}
我在service层开始实现代码 类名:AccuntService
public void shixian(String from,String to,int qian){
Connection conn = null;
try{
conn=Jdbcutil.getConnection();//自己写的工具。
//开始事物
conn.setAutoCommit(false);//autoCommit
- 为 true
表示启用自动提交模式;为 false
表示禁用自动提交模式
AccountDao accd = new AccountDao();
accd.zhuanzhang(from,qian);
accd,zhuanzhuang(to,qian);
conn.commit();
conn.close();
}catch(Exception e){
try{
conn.rollback();//捕获异常,事物回滚。
}catch(SqlException e){
e.pran...();
}
}
}
//测试类 测试一下
@Test
pubic void fun1(){
AccuntService as = new AccuntService();
as.shixian('zs','ls',100);
}