数据批处理和事务控制

数据批处理

可以进行多个数据的操作。

public class TestAddBath {
    public static void main(String[] args) throws SQLException {
        TestOne.getConnection();
    }
}

class TestOne {
    static Connection con = null;
    static PreparedStatement ps = null;

    {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
        con.setAutoCommit(false);
        ps = con.prepareStatement("insert into tanx(name) values(?)");
            for (int i = 0; i < 10; ++i) {
                ps.setObject(1, "111");
                //数据批处理
                ps.addBatch();
            }
        //数据批处理
        ps.executeBatch();
        return con;
    }
}

结果:

在这里插入图片描述

事务控制

在没有事务回滚时,当多个数据进行操作时,一个出错,其他的仍然会成运行,而事务回滚则是在多个数据有一个出错时,就会回到没有操作之前,要么就一起成功,要么就一起失败。

事务有四个特性,ACID事务描述的缩写:

1,原子性(atomic),事务由一个或多个行为捆绑在一起构成,好像是一个单独的工作单元。原子性保证事务内的操作要么都发生,要么都不发生。假如所有的操作都成功了,那么事务是成功的。加入任何一个操作失败,那么事务会进行回滚。

2,一致性(consistent),一旦一个事务结束了,不管成功还是失败,系统所处的状态和它的业务规则是一致的。也就是说,数据应当不会被破坏。

3,隔离性(isolation),事务应当允许多名用户操作同一个数据,一个用户的操作不会和其他用户的操作相混淆。因此,事务必须是隔离的,防止并行读写同一个数据的情况发生。注意,隔离通常意味着要锁定数据库的表或行。

4,持久性(durable),一旦事务完成,事务的结果应当持久化。这样不管什么样的系统崩溃,它们都能幸免于难。

示例:

public class TestAddBath {
    public static void main(String[] args) throws SQLException {
        TestOne.getConnection();
    }
}

class TestOne {
    static Connection con = null;
    static PreparedStatement ps = null;

    {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
      //JDBC默认采用的是自动事务,它的特性就是一个出错,其他的正常运行,不能事务回滚,必须关闭
        con.setAutoCommit(false);
        ps = con.prepareStatement("insert into tanx(name) values(?)");
        try{
            for (int i = 0; i < 10; ++i) {
                ps.setObject(1, "111");
                //数据批处理
                ps.addBatch();	
            }
        }catch (Exception e){
            //回滚操作
            con.rollback();
        }
        //数据批处理
        ps.executeBatch();
        return con;
    }
}
发布了61 篇原创文章 · 获赞 0 · 访问量 2169

猜你喜欢

转载自blog.csdn.net/sabstarb/article/details/104796818