中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

JDBC: 批量處理提高SQL處理速度

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
  當(dāng)需要成批插入或者更新記錄時(shí)。可以采用Java的批量更新機(jī)制,這一機(jī)制允許多條語句一次性提交給數(shù)據(jù)庫批量處理。通常情況下比單獨(dú)提交處理更有效率
JDBC的批量處理語句包括下面兩個(gè)方法:
addBatch(String):添加需要批量處理的SQL語句或是參數(shù);
executeBatch();執(zhí)行批量處理語句;
通常我們會遇到兩種批量執(zhí)行SQL語句的情況:
多條SQL語句的批量處理;

一個(gè)SQL語句的批量傳參;

測試代碼:

    import java.sql.Connection;  
    import java.sql.Date;  
    import java.sql.PreparedStatement;  
    import java.sql.Statement;  
      
    import org.junit.Test;  
      
    import xuezaipiao1.JDBC_Tools;  
    /** 
     * 向Oracle 的 temp 數(shù)據(jù)表中添加  10萬 條記錄 
     * 測試如何插入,用時(shí)最短 
     */  
      
    public class JDBCTest {  
          
        /** 
         *  
         * 1.使用 Statement . 
         * 測試用時(shí):35535 
         */  
        @Test  
        public void testBbatchStatement() {  
            Connection conn = null;  
            Statement statement = null;  
            String sql = null;  
            try {  
                conn = JDBC_Tools.getConnection();  
                JDBC_Tools.beginTx(conn);  
                  
                long beginTime = System.currentTimeMillis();  
                statement = conn.createStatement();  
                for(int i = 0;i<100000;i++){  
                    sql = "INSERT INTO temp values("+(i+1)  
                            +",'name_"+(i+1)+"','13-6月 -15')";  
                    statement.executeUpdate(sql);  
                }  
                long endTime = System.currentTimeMillis();  
                System.out.println("Time : "+(endTime - beginTime));  
                JDBC_Tools.commit(conn);  
            } catch (Exception e) {  
                e.printStackTrace();  
                JDBC_Tools.rollback(conn);  
            }finally{  
                JDBC_Tools.relaseSource(conn, statement);  
            }  
        }  
          
        /** 
         * 使用PreparedStatement  
         * 測試用時(shí):9717 
         */  
        @Test  
        public void testBbatchPreparedStatement() {  
            Connection conn = null;  
            PreparedStatement ps = null;  
            String sql = null;  
            try {  
                conn = JDBC_Tools.getConnection();  
                JDBC_Tools.beginTx(conn);  
                  
                long beginTime = System.currentTimeMillis();  
                sql = "INSERT INTO temp values(?,?,?)";  
                ps = conn.prepareStatement(sql);  
                Date date = new Date(new java.util.Date().getTime());  
                for(int i = 0;i<100000;i++){  
                    ps.setInt(1, i+1);  
                    ps.setString(2, "name_"+i);  
                    ps.setDate(3, date);  
                    ps.executeUpdate();//9717  
                }  
                long endTime = System.currentTimeMillis();  
                System.out.println("Time : "+(endTime - beginTime));  
                JDBC_Tools.commit(conn);  
            } catch (Exception e) {  
                  
                e.printStackTrace();  
                JDBC_Tools.rollback(conn);  
            }finally{  
                JDBC_Tools.relaseSource(conn, ps);  
            }  
        }  
              
        /** 
         * 測試用時(shí) : 658 
         */  
        @Test  
        public void testBbatch() {  
            Connection conn = null;  
            PreparedStatement ps = null;  
            String sql = null;  
            try {  
                conn = JDBC_Tools.getConnection();  
                JDBC_Tools.beginTx(conn);  
                  
                long beginTime = System.currentTimeMillis();  
                sql = "INSERT INTO temp values(?,?,?)";  
                ps = conn.prepareStatement(sql);  
                Date date = new Date(new java.util.Date().getTime());  
                for(int i = 0;i<100000;i++){  
                    ps.setInt(1, i+1);  
                    ps.setString(2, "name_"+i);  
                    ps.setDate(3, date);  
                      
                    //積攢SQL  
                    ps.addBatch();  
                      
                    //當(dāng)積攢到一定程度,就執(zhí)行一次,并且清空記錄  
                    if((i+1) % 300==0){  
                        ps.executeBatch();  
                        ps.clearBatch();  
                    }  
                }  
                //總條數(shù)不是批量值整數(shù)倍,則還需要在執(zhí)行一次  
                if(100000 % 300 != 0){  
                    ps.executeBatch();  
                    ps.clearBatch();  
                }  
                long endTime = System.currentTimeMillis();  
                System.out.println("Time : "+(endTime - beginTime));  
                JDBC_Tools.commit(conn);  
            } catch (Exception e) {  
                  
                e.printStackTrace();  
                JDBC_Tools.rollback(conn);  
            }finally{  
                JDBC_Tools.relaseSource(conn, ps);  
            }  
        }  
    }  

標(biāo)簽: 代碼 數(shù)據(jù)庫

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:用Python寫Exploit

下一篇:Java使用HMAC-SHA1算法