Java日记之JDBC事务

书接上文 , 上文我们将到的JDBC操作都是孤立的 , 一旦两句SQL间出现异常, 数据库将无法执行一部分操作 ,造成损失 , 因此本文将讲述JDBC的事务

C++课设是真的麻烦,也可能我太菜了

写在前面

提及事务 , 事务的范围很广 , 举个例子 , 注册QQ号

在注册之前 , 你必须填写你的个人信息 , 然后是获取验证码 , 然后绑定手机
那最后一步是? 没错 ,就是提交 ,在你提交之前 , 你的任何操作都到不了鹅厂的数据库(打个比方,具体如何我也不知道,理是这么个理) ,只有你最后提交通过了 , 你才能拿到你的QQ号 ,否则 ,之前的一切操作对方存QQ号的数据库都是不知道的.

这也是本文最重要的地方 ,提交 ,无论对数据库做何种操作 ,最后不提交 ,对数据库的修改都是临时的, 退出后都失效

事务的特性

ACID特性 :
原子性 :每一个事务都是不可分割的单元 ,要么不做,要么都做(要么都成功 ,要么都失败)
一致性 : 事务必须使数据库从一个一致性到另一个一致性
隔离性 : 一个事务的操作不能对另一个事务产生影响
持久性 : 事务提交后将永久地改变数据库

运行时出现异常,用事务的写法?

主要步骤 : ①连接数据库
②设置一个手动提交 setAutoCommit(false)
exeUpdate() 执行对数据库的修改
conn.commit() 如果无异常 ,就提交
如果有异常 : 执行回滚 conn.roolback()
⑤ 关闭

public void transation() throws SQLException {
		conn(); //连接数据库方法(自写)
		
		try {
			//手动提交
			conn.setAutoCommit(false);
			stmt=conn.createStatement(); //语句载体
			
			String sql="update test set balence = balence -300 where name ='张三'";
			
			stmt.executeUpdate(sql);
			System.out.println("sql");
			String sql2="update test set balence = balence +300 where name ='李四'";
			stmt.execute(sql2);
			System.out.println("sql2");
			//无异常时,提交生效
			conn.commit();
			
			
		} catch (Exception e) {
			//异常时 ,回滚之前执行的操作(撤回SQL语句)
			conn.rollback();
			e.printStackTrace();
		}finally {
			close();
		}
	}

**注:**①在执行关联操作(如转账 ,下订单时) ,都要必须加入事务
②只有在未提交前 ,才能使用rollback() 已提交的操作无法rollback
③如果最后没有执行 commit() ,对数据库的操作都是临时的 ,不是永久的

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读