JDBC的批处理

JDBC的批处理:

    1)批处理:一次性处理很多数据。
  解释:有时候需要向数据库发送一批sql语句执行,这时应避免向数据库一条条的发送执行,

   而应采用JDBC的批处理机制,以提升执行效率。
    2)两种方式:
      Statement :                  //Statement stat=conn.createStatement();创建语句
        stat.addBatch(sql):将sql填入缓冲区,进行编译。
        stat.executeBatch():将缓冲区中的数据一次性执行。
      PreparedStatement:    //PreparedStatement ps=conn.prepareStatement(sql);
        ps.addBatch():将参数放入占位符?存入缓存区。
        ps.executeBatch()::将缓存区中的数据一次性执行。
    3)案例:
      向表bank_money插入1070条数据。

1)
@Test
    public void testStatement() {
        Connection conn=null;
        try {
            conn= DBUtil2.getconn();
            Statement stat=conn.createStatement();
            long l1=System.currentTimeMillis();
            for(int i=10;i<1080;i++) {
                String sql="insert into login_info          
                  values("+i+",'zs','111111')";
                 stat.addBatch(sql); 
                 //将sql填入缓冲区,进行编译。         
                  stat.executeQuery(sql);
            }
            stat.executeBatch();//:将缓冲区中的数据一次性执行。
            long l2=System.currentTimeMillis();
            System.out.println(l2-l1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }       
2)
@Test
    public void testPreparedStatement() {
        Connection conn=null;
        try {
            conn=DBUtil2.getconn();
            String sql="insert into login_info values(?,?,?)";
            PreparedStatement ps=conn.prepareStatement(sql);
            long l1=System.currentTimeMillis();
            for(int i=10;i<1080;i++) {
                ps.setInt(1, i);
                ps.setString(2, "zs");
                ps.setString(3, "111111");
                ps.addBatch();// 将参数放入占位符?存入缓存区
                if(i%100==0) {
                    ps.executeBatch();//每100次将 将缓存区中的数据一次性执行。,
                }
            }
            ps.executeBatch();//将缓冲区数据一次性执行
            long l2=System.currentTimeMillis();
            System.out.println(l2-l1);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtil2.colseconn(conn);
        }
    }  
3public class DBUtil2 {
    private static String driver;
    private static String url;
    private static String user;
    private static String pwd;
    /**读取配置文件,只需要加载一次*/
    static {
        try {//从db文件读取出来内容
            /*文件字符流:默认当前文件路径在工程名下。         
             * "db.properties"
             * :通过当前类的类加载器所获取的流读取配置文件
             */
            FileReader fr=new FileReader("db.properties");
            Properties prop=new Properties();
            prop.load(fr);
            driver=prop.getProperty("driver");
            url=prop.getProperty("url");
            user=prop.getProperty("user");
            pwd=prop.getProperty("pwd");
            Class.forName(driver);//1加载驱动
        } catch (Exception e) {
            e.printStackTrace();
            /*  "db.properties:
                          driver=oracle.jdbc.driver.OracleDriver
             #driver=oracle.jdbc.OracleDriver
             url=jdbc:oracle:thin:@localhost:1521:orcl
             user=scott
             pwd=1234
             * 
             */
        }
    }
    public static  Connection getconn() {//2.建立连接
        Connection conn=null;
        try {
            conn = DriverManager.getConnection( 
                    url, user, pwd);
             
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    public static void colseconn(Connection conn) {
        try {
            if(conn!=null) {
                conn.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        System.out.println(getconn());//返回连接对象
    }
}
    
原文地址:https://www.cnblogs.com/xiaozelulu/p/8660272.html