zoukankan      html  css  js  c++  java
  • jdbc 批处理

    package com.itheima.batch;
    
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.Statement;
    
    import org.junit.Test;
    
    import com.itheima.utils.JdbcUtil;
    /**
     * 批处理  st.addBatch(sql);    st.executeBatch()   st.clearBatch();
     *       Statement     
     *             1.sql语句固定
     *             2.可以一次性批量执行不同的sql
     * 
     *       PreparedStatement
     *             1.sql语句的参数是不确定的
     *             2.一次性批量执行相同的sql
     
     create table testbatch(
         id int primary key,
         name varchar(20)
     );
     *
     */
    public class BatchTest {
    
        @Test   
        public void testBatchStatement(){
            Connection con = null;
            Statement st =null;
            
            try {
                con = JdbcUtil.getConnection();
                st = con.createStatement();
                String sql="insert into testbatch values(1,'cgx')";
                String sql2 = "update testbatch set name='aj' where id=1";
                
                st.addBatch(sql);//将sql语句 加入到指处理队列中
                st.addBatch(sql2);
                
                //3.执行
                int []result = st.executeBatch();//int []用于保存每条语句受影响的行数
                for(int i:result){
                    System.out.println(i);
                }
                
                //4.清空批处理队列
                st.clearBatch();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.release(null, st, con);
            }
        }
        @Test   
        public void testBatchPreparedStatement(){
            Connection con = null;
            PreparedStatement st =null;
            
            try {
                con = JdbcUtil.getConnection();
                String sql="insert into testbatch values(?,?)";
                st = con.prepareStatement(sql);
                
                //赋值
                for (int i = 0; i <100000000; i++) {//这是一个坑
                    st.setInt(1, 10+i);
                    st.setString(2, "cgx"+i);
                    //添加到队列中  (内存中  溢出)
                    st.addBatch();
                }
                
                //执行批处理
                st.executeBatch();
                //清空批处理队列
                st.clearBatch();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.release(null, st, con);
            }
        }
        
        //优化PreparedStatement实现批处理
        @Test   
        public void testBatchPreparedStatement2(){
            Connection con = null;
            PreparedStatement st =null;
            
            try {
                con = JdbcUtil.getConnection();
                String sql="insert into testbatch values(?,?)";
                st = con.prepareStatement(sql);
                
                //赋值
                for (int i = 0; i <1000; i++) {//这是一个坑
                    st.setInt(1, 100+i);
                    st.setString(2, "cgx"+(100+i));
                    
                    
                    //添加到队列中  (内存中  溢出)
                    st.addBatch();
                    if(i%100==0){
                       st.executeBatch();//分批执行批处理
                        //清空批处理队列
                       st.clearBatch();
                    }
                }
                
                //执行批处理----当不是1000整数倍时,它就会执行
                st.executeBatch();
                //清空批处理队列
                st.clearBatch();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.release(null, st, con);
            }
        }
    }
  • 相关阅读:
    paramiko连接sshd使用的hostkey
    jmete命令行停止失败的原因分析
    send-mail: fatal: parameter inet_interfaces: no local interface found for ::1
    linux安装mail服务使用外部MTA发送邮件
    crontab使用简介
    pip命令自动补全功能;设置代理;使用国内源
    grep使用正则表达式搜索IP地址
    python执行系统命令的几种方法
    js 字符串 replace replaceAll
    tomcat 和 jboss的热部署(热发布)问题
  • 原文地址:https://www.cnblogs.com/baijin05/p/5073085.html
Copyright © 2011-2022 走看看