JDBC ACID

事务---要么全做,要么一个都不做。

原子性 (atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
一致性(consistency):在事务处理执行前后,数据库是一致的(两个账户要么都变,或者都不变)。
隔离性 (isolcation):一个事务处理对另一个事务处理没有影响。
持续性(durability):事务处理的效果能够被永久保存下来 。

 

1.打开事务

connection.setAutoCommit(false);

 

2.提交事务
connection.commit();

 

3.回滚事务
connection.rollback();

 

 

 本来打算模拟一个将一个账户的钱转到另一个账户中,但是转账的过程中出现了问题。

不知道为什么在oracle一直不成功,后来用mysql实现了。

 之前的数据库


JDBC ACID

 

	public static void test() throws SQLException {
	
		Connection con = null;
		ResultSet rs = null;
		Statement st = null;
		try {
			con = JdbcUtil.getConnection();
			con.setAutoCommit(false);



			st = con.createStatement();
			String sql = "update person set money=money-100 where id=2";
			st.executeUpdate(sql);

			sql = "select money from person where id=3";
			rs = st.executeQuery(sql);
			int money = 0;
			if (rs.next()) {
				money = rs.getInt("money");
			}
			if (money > 300) {
				throw new RuntimeException("已经超过最大值");
			}
			sql = "update person  set money=money+100 where id=2";
			st.executeUpdate(sql);
			con.commit();
		} catch (SQLException e) {
			con.rollback();



throw e; } finally { JdbcUtil.free(rs, st, con); } }
 

   结果:

 

Exception in thread "main" java.lang.RuntimeException: 已经超过最大值
	at cn.lib.jdbc.TxTest.test(TxTest.java:61)
	at cn.lib.jdbc.TxTest.main(TxTest.java:17)

   但是数据库中的值没有发生变化。

 

 

 

 

 

你可能感兴趣的:(jdbc)