(四十六)JDBC处理事务采用什么方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/88251355

一、commit()、rollback()

   一个事务由一条或多条对数据库操作的SQL语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行完毕了,整个事务才会被提交给数据库。

      在JDBC中,一般是通过commit()方法或rollback()方法来结束事务的操作。其中commit()表示完成对事务的提交,rollback()方法表示完成事务回滚,多用于在处理事务的过程中出现了异常的情况

    一般情况下,事务默认操作是自动提交,即操作成功后,系统将自动调用commit()方法,否则将调用rollback()方法。

   当然,在JDBC中,也可以通过setAutoCommit(false)方法来禁止自动提交,然后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()方法实现整体提交,如果其中一个表达式操作失败,就会抛出异常,而不会调用commit()方法。在这种情况下,就可以在异常捕获的代码块中调用rollback()方法进行事务回滚。利用这种方法可以保持对数据库的多次操作后,数据仍然保持一致性。

public  void updateDate()
	{
	
		
		
		try {
			
            //设置事务自动提交为false
			con.setAutoCommit(false);
			stmt.execute("insert into employee values(4,'jim4',30)");
            
            //模拟事务中出现异常情况
			int b=1/0;
             
             //若以上事务没有报错,则手动提交事务
			con.commit();
			
		} catch (SQLException e) {
			try {
                //事务有异常,则回滚
				con.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
		}
	}

二、JDBC有哪些事务隔离级别(5)

①TRANSACTION_NONE_JDB:不支持事务

②TRANSACTION_READ_UNCOMMITTED:未提交读

③TRANSACTION_READ_COMMITTED:已提交读

④TRANSACTION_REPEATABLE_READ:可重复读

⑤TRANSACTION_SERIALIZABLE:可序列化

 事务隔离级别越高,为避免冲突所花费精力也就越多。可以通过Connection对象的con.setTransactionLevel()方法来说设置隔离级别,通过con.getTransactionIsolation()方法来确定当前事务的级别

之前的学习笔记:

一、事务并发带来的问题

  1. 脏读(无效数据的读出):一个事务读取了另一个事务未提交的数据

是指在数据库访问中,事务T1将某一个值修改(并没有提交),T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取的数据是无效的。

  1. 不可重复读:(重点在修改)

事务T1读到了一条数据,事务T2把这条数据改变了,然后事务T1再读时候,发现数据不匹配

  1. 幻读:(重点在新增或删除)

两次读出来的记录数不一样。

事务T1根据条件检索到N条数据,然后事务T2新增了M条符合T1筛选条件的数据,导致事务T1再次搜索发现有N+M条数据,产生幻读

  1. Read uncommitted:最低级别它允许一个事务读取另一个事务还没提交的数据,这样会提高性能,但是会导致脏读等问题
  2. Read commit:正在读的事务,必然是其他事务已经提交的事务(不会再读到其他事务的中间值)会有不可重复读问题
  3. Repeatable read(默认):在一个事务开始后,其他事务对数据库的修改在本事务中不可见,直到本事务commit或rollback。但是,其他事务的insert/delete操作对该事务是可见的,也就是说,该隔离级别并不能避免幻读问题。在一个事务中重复select的结果一样,除非本事务中update数据库。
  4. Serializable:其他会话会对该表的写操作挂起

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/88251355