JDBC的进化3--补充:事务处理
接着JDBC的进化3,我们来讲数据库事务。 @Test
public void test() {
String sql1 = "UPDATE user_table SET balance = balance - 100 WHERE `user` = ?";
String sql2 = "UPDATE user_table SET balance = balance + 100 WHERE `user` = ?";
Object[] obj1 = new Object[1];
obj1[0] = new String("AA");
Object[] obj2 = new Object[1];
obj2[0] = new String("BB");
Connection conn = null;
try {
conn = JDBCUtils.getConnection();
conn.setAutoCommit(false);
prepareUpdate(conn,sql1,obj1);
prepareUpdate(conn,sql2,obj2);
conn.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(null,null,conn);
}
}
public int prepareUpdate(Connection conn,String sql,Object... args) {
// get preparedStatement's object
PreparedStatement ps = null;
// execute the ps
int rows = 0;
try {
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1,args[i]);
}
rows = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(ps,null);
}
// return
return rows;
} 这就是1个正确的事务处理,保证了两个更新都成功,不会由于断开连接或是异常的出现而使数据更新出错。 要测试的话,在两个update中间加上异常就能够了。需要注意的是,不能自定义异常,假设自定义异常,下面的代码就永久运行不到,回报编译毛病。(自定义异常相当于return语句) 补充1点: 事务的隔离级别: 隔离级别: Oracle 支持的 2 种事务隔离级别:READ COMMITED,SERIALIZABLE。 Oracle 默许的事务隔离级别为: READ COMMITED Mysql 支持 4 种事务隔离级别. Mysql 默许的事务隔离级别为: REPEATABLE READ 查看和设置事务级别: 好了,over。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |