jdbc----事务

事务---这种事务只能在一个数据库中搞。。如果要跨多个数据源的事务,使用JTA
	SavePoint sp = null;
try{
	conn.setAutoCommit(false);
	st= conn.createStatement();
	String sql = "update XXX"; //这里是先更新,如果先更新,那么数据库会自动上锁,如果是先查询,那么如果还要保证原子级别,那么请在查询语句上加上for update,注意的是事物并不能保证多线程,需要与数据库的锁配合才行,他只能保证这个操作时原子的,也就是一块被提交
	st.executeUpdate(sql);
	sp = conn.setSavePoint(); //设置保存点,可以保证在保存点之前的操作有效
	
	sql ="select money from user where id = 2";
	rs = st.executeQuery(sql); //注意,这里st被复用了,但是结果集不能被复用
	
	if(rs.next()){
	  money = rs.getFloat("money");
	}
	。。。。。
	
	conn.commit();

}catch(SQLException e){
  if(conn != null && sp !=null)
     conn.rollback(sp);
     conn.commit();  //推到保存点,然后执行保存点之前的代码
   throw e;
}catch(Exception e){
	if(conn != null)
	conn.rollback();
	
	throw e;
}

你可能感兴趣的:(多线程,sql,jdbc)