zoukankan      html  css  js  c++  java
  • JDBC批量处理

    JDBC批量处理

    批量处理JDBC语句提高处理速度

    ~addBatch(String):添加需要批量处理的SQL语句或是参数;

    ~executeBatch():执行批量处理语句;

        /**
         * 向Oracle的customers数据表中插入10万条记录
         * 测试如何插入,用时最短
         * 1.使用Statement
         * 2.使用PreparedStatement
         * 3.使用Batch
         */
        @Test
        public void testBatchWithStatement(){
            Connection conn = null;
            Statement statement = null;
            String sql = null;
    
            try {
                conn = Methods.getConnection();
                Methods.beginTx(conn);
                statement = conn.createStatement();
    
                long begin = System.currentTimeMillis();
    
                for (int i = 0; i <10000 ; i++) {
                    sql="insert into account values("+(i+1) + ",name_"+i+")";
                    statement.executeUpdate(sql);
                }
                long end = System.currentTimeMillis();
    
                System.out.println(end-begin);//39567
                Methods.commit(conn);
            } catch (Exception e) {
                e.printStackTrace();
                Methods.rollback(conn);
            }finally {
                Methods.release(statement,conn,null);
            }
        }
    
        @Test
        public void testBatchWithPreparedStatement(){
            Connection conn = null;
            PreparedStatement preparedStatement= null;
            String sql = null;
    
            try {
                conn = Methods.getConnection();
                Methods.beginTx(conn);
                sql="insert into account(name,password) values(?,?)";
                preparedStatement = conn.prepareStatement(sql);
    
                long begin = System.currentTimeMillis();
    
                for (int i = 0; i <10000 ; i++) {
                    preparedStatement.setString(1,"name_"+i);
                    preparedStatement.setString(2,"i");
                    preparedStatement.executeUpdate();
                }
    
                long end = System.currentTimeMillis();
    
    
                System.out.println(end-begin);//9819
                Methods.commit(conn);
            } catch (Exception e) {
                e.printStackTrace();
                Methods.rollback(conn);
            }finally {
                Methods.release(preparedStatement,conn,null);
            }
        }
    
        @Test
        public void testBatch(){
            Connection conn = null;
            PreparedStatement preparedStatement= null;
            String sql = null;
    
            try {
                conn = Methods.getConnection();
                Methods.beginTx(conn);
                sql="insert into account(name,password) values(?,?)";
                preparedStatement = conn.prepareStatement(sql);
    
                long begin = System.currentTimeMillis();
    
                for (int i = 0; i <10000 ; i++) {
                    preparedStatement.setString(1,"name_"+i);
                    preparedStatement.setString(2,"i");
    
                    //“积攒”SQL
                    preparedStatement.addBatch();
    
                    //当积攒到一定程度,就统一的执行一次,并且清空先前"积攒"的SQL
                    if((i+1)%300==0){
                        preparedStatement.executeBatch();
                        preparedStatement.clearBatch();
                    }
                }
    
                //若总条数不是批量数值的整数倍,则还需要再额外的执行一次
                if(100000%300!=0){
                    preparedStatement.executeBatch();
                    preparedStatement.clearBatch();
                }
    
                long end = System.currentTimeMillis();
    
    
                System.out.println(end-begin);//569
                Methods.commit(conn);
            } catch (Exception e) {
                e.printStackTrace();
                Methods.rollback(conn);
            }finally {
                Methods.release(preparedStatement,conn,null);
            }
        }
    

      

    从util.Date转为sql.Date

    Date date = new Date(new java.util.Date().getTime());

  • 相关阅读:
    ASP.NET -- repeater控件的使用
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40
    错误提示:在此上下文中不允许使用名称 "***"。有效表达式包括常量、 常量表达式和变量(在某些上下文中),不允许使用列名。
    mongodb 性能提高之利用索引, 待续
    工程化 经历的 4 个阶段
    把连续的字符 变成 一个
    sort 排序详解
    理解正则 的 ?! ?:
    [ 订单查询 ] 性能 高并发 : 分表 与 用户id%1024 存放表
    搭建LNMP基础框架
  • 原文地址:https://www.cnblogs.com/yangHS/p/10839030.html
Copyright © 2011-2022 走看看