处理事务、事物隔离和批量处理

1 如果多个操作,写个操作使用的是自己的单独的连接,则无法保证事物。事物要求多个操作一起执行,一起回滚。

2 具体操作:

1)事物操作开始前,开始事物,取消Connection的默认提交行为。

2)如果事物的操作都成功,则提交事务

3)若出现异常,则在catch中回滚事务

3 四种事物隔离级别:

1)READ UNCOMMITTED:读其他事务未提交的数据,会出现脏读、不可重复读和幻读的问题。

2) READ COMMITED:只允许事物读其他事务已提交的数据(Orable默认),但有不可重复读和幻读的问题。

3) REPEATABLE READ:可重复读(Mysql默认):确保事物可以多次从一个字段中读取相同的值,在这个事物的持续访问期间,禁止其他事务对这个字段进行更新。但会有幻读的问题。

4) SERIALIZABLE:串行化。确保食物可以从一个表中读取相同的行,执行期间禁止其他事务进行插入、更新和删除操作。所有并发问题都可避免。

public class JdbcTools {
    //处理数据库的事物
    public static void commit(Connection conn){
        try {
            conn.commit();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void rollback(Connection conn){
        try {
            conn.rollback();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void beginTx(Connection conn){
        try {
            conn.setAutoCommit(false);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
package lianxi1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Random;

import org.junit.Test;
//计算向数据库中添加10000条数据的时间
public class TestBatch {
  @Test
  public void test1(){
      Connection conn = null;
      PreparedStatement ps = null;
      try {
        conn = JdbcTools.getConnection();
        //System.out.print(conn);
        JdbcTools.beginTx(conn);

        String sql = "INSERT INTO STORE(SID,SNAME,SPRICE) VALUES(?,?,?)";
        ps = conn.prepareStatement(sql);
        long begin = System.currentTimeMillis();
        for(int i=0;i<10000;i++){
           ps.setInt(1,i+1);
           ps.setString(2,"item_"+i);
           ps.setInt(3, new Random().nextInt(1000));
           ps.addBatch();
           if((i+1)%300==0){
               ps.executeBatch();
               ps.clearBatch();

           }
        }
        if((10000%300)!=0){
               ps.executeBatch();
               ps.clearBatch();
        }
        long end = System.currentTimeMillis();
        System.out.println("time="+(end-begin));
        JdbcTools.commit(conn);
    } catch (Exception e) {
        JdbcTools.rollback(conn);
        e.printStackTrace();
    }
    finally{
        JdbcTools.release(null, ps, conn);
    }
  }
}
时间: 2024-09-30 08:49:12

处理事务、事物隔离和批量处理的相关文章

JDBC学习笔记(7)——事务的隔离级别&amp;批量处理

数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段,

【转】JDBC学习笔记(7)——事务的隔离级别&amp;批量处理

转自:http://www.cnblogs.com/ysw-go/ 数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.不可重复读: 对于两个事务 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.幻

事物隔离级别_悲观与乐观锁

  1.我印象中的事物事务是一种机制,它确保多个SQL语句被当作完整的操作单元来处理,所有的操作都完成时统一提交. 2.关系数据库的事务特性(ACID) ACID:原子性: 事务是数据库的逻辑工作单位,而且必须是原子工作单位,对于修改,要么全部执行,要么全部不执行        一致性:事务在完成时,必须是所有的数据都保持一致状态. 隔离型: 一个事务的执行不能被其他事务所影响.事务必须是互相隔离的,防止并发读写同一个数据的情况发生 持久性: 一个事务一旦提交,事物的操作便永久性的保存在DB中.

JDBC: 处理事务 &amp; 事务的隔离级别

一.数据库事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态. 为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态. 事务的操作:先定义开始一个事务,然后对数据作修改操作,这时如果提交(COMMIT),这些修改就永久地保存下来,如果回退(ROLLBACK),数据库管理系统将放弃所作的所有修改而回到开始事务时的状态.

数据库事务与隔离等级

事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性:保证事务中的所有操作全部执行或全部不执行.例如执行转账事务,要么转账成功,要么失败.成功,则金额从转出帐户转入到目的帐户,并且两个帐户金额将发生相应的变化:失败,则两个账户的金额都不变.不会出现转出帐户扣了钱,而目的帐户没有

数据库的四大特性,以及事务的隔离级别

数据库必须具备的四个特性 1:原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响: 2:一致性:事务执行前和执行后必须处于一致性状态,用户A和用户B的前加起来一共是5000; 无论AB用户之间是如何相互转换的,事务结束后两个用户的钱加起来还是5000,这就是事务的一致性. 3:隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离: 4:持久性:一个事务一旦被提交了,那么

Spring事务的隔离级别

转自:http://blog.csdn.net/zhouwubin123/article/details/7199538 担心文章没有了, 在这里重复贴一下. 在Spring中定义了5中不同的事务隔离级别: 1. ISOLATION_DEFAULT(一般情况下使用这种配置既可) ; 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 2. ISOLATION_READ_UNCOMMITTED这是事务最低的隔离级别,它充许别外一个事务可以看到

Oracle 事物隔离级别

1.事务介绍 Oracle11g中的事务是隐式自动开始的,不需要用户显示的执行开始事务语句.但对于事务的结束处理,则需要用户进行指定的操作.通常在以下情况下,Oracle认为一个事务结束了. (1)  执行Commit语句提交事务 (2)  执行Rollback语句撤销事务 (3)  执行一条数据定义语句.如果该语句执行成功,那么oracle系统会自动执行commit命令:否则,系统会自动执行Rollback命令. (4)  执行一个数据控制命令,当语句执行完毕,oracle系统会自动执行com

数据库事物隔离级别通俗理解

转自:http://www.oschina.net/question/258230_134502 总的说,数据库事物无非就两种:读取事物(select).修改事物(update,insert).在没有事物隔离控制的时候,多个事物在同一时刻对同一(数据的操作可能就会影响到最终期望的结果,通常有四种情况 (1) 两个更新事物同时修改一条数据时,很显然这种情况是最严重的了,程序中无论如何也不能出现这种情况,因为它会造成更新的丢失!通俗的讲,我更新时,你丫也更新这不就出问题了吗,艹,不行! (2) 一个