1. <th id="92sxj"></th>
    <li id="92sxj"><tr id="92sxj"><cite id="92sxj"></cite></tr></li><button id="92sxj"><acronym id="92sxj"><input id="92sxj"></input></acronym></button>
      <dd id="92sxj"><noscript id="92sxj"></noscript></dd>

      <rp id="92sxj"><object id="92sxj"></object></rp>
        當前位置:首頁 > IT技術

        executeBatch批量處理問題

        時間:2019-07-24 08:12:13來源:IT技術作者:seo實驗室小編閱讀:72次「手機版」
         

        executebatch

        BOSS交給了我一個任務,讀取文件,將文件中的數據以“|”為分割標志,將分割出來的字段一一對應數據庫里的字段插入里面。

        1.前面的簡單,首先IO流讀取數據,然后將讀取出來的數據一條條遍歷,再分割一下完事。

        代碼

          public static void readTxtFile(String filePath) throws IOException, sqlException{  
                            String encoding="UTF-8"; 
        	                File file=new File(filePath); 
                        	inputstreamreader read = new InputStreamReader(new     
                                            fileinputstream(file),encoding);//考慮到編碼格式 
                            BufferedReader bufferedReader = new BufferedReader(read); 
                            String lineTxt = null; 
                            
                            List list =new ArrayList();
                            while((lineTxt = bufferedReader.readLine()) != null){ 
                            	
                            	String[] temp=lineTxt.split("\\|");
                            	String sqlValue="VALUES (";
                                for(int i=0;i<temp.length;i++) {
                                	temp[i]=temp[i].trim();
                                	if(i!=temp.length-1) {
                                		sqlValue+="'"+temp[i]+"'"+",";
                                	}else {
                                		sqlValue+="'"+temp[i]+"'";
                                	}
                                }
                                sqlValue+=")";
                                sqlValue= sqlValue.replace("null", "");
                                String sql=sqlValue;
                               
                                list.add(sql);
                            }
                         read.close();  
        }
        
        public static void main(String argv[]) throws IOException, SQLException{ 
            	
                String filePath = "E:\\緩存\\QQ緩存\\1023047818\\FileRecv\\part-00000"; 
                readTxtFile(filePath);
            	
            }

        2.難度就來了,傳統的更新語句肯定不行了,因為有17萬數據,一條一條插入會累死Ecilpse的,所以另外一種方法就出來了:executeBATch!這是個批量執行神器,比如我這種情況要一次執行數萬數十萬的數據的時候,每千條執行一次會極大提升效率。別的不說先上代碼:

            private static void  doexcuteBatch(List list) {
            
            	try {
            		try {
        				conn = DriverManager.getConnection(dburl, DBUSER, password);
        			} catch (SQLException e) {
        				// TODO Auto-generated catch block
        				e.printstacktrace();
        			}
        			    		statement pstmt = null;
        			          class.forname(drive);
        			            conn = DriverManager.getConnection(dburl, DBUSER, password);
        			    	
        			    	  conn.setAutoCommit(false);
        			    	  pstmt = conn.createStatement();
        			    	  
        			          for(int i=0;i<list.size();i++) {
        			         	 pstmt.addBatch(list.get(i).toString());
        			         	 
        			         	if (i > 1 && (i+1) % 1000 == 0) {
        			         		
        			         		long startTime = system.currenttimemillis();
        			         		pstmt.executebatch();
        							conn.commit();
        							pstmt.clearBatch();
        							System.out.println("提交:" + i);
        							System.out.println("executeBatch 執行使用了 :"+(System.currentTimeMillis() - startTime )/1000 + " 秒");
        							}					
        					}
        			          
        			          pstmt.executeBatch();
        
        			          pstmt.close();
        			          conn.commit();  
        		}catch(Exception e) {
        		    		e.printStackTrace();
        		    	}
            }
            
        

        要注意的問題是1 conn.setAutoCommit(false);? ? ? ? ?要關閉自動提交

        ? ? ? ? ? ? ? ? ?2 pstmt = conn.createStatement();? ?要把ps放在循環外面,不然只會執行一條

        ?? ? ? ? ? ? ? ? ? ? ? 3??pstmt.clearBatch();? ? ? ? ? ? ? ? ? ? ? ? 每次執行后要將ps clear一下,防止程序卡死及重復提交

        相關閱讀

        doc格式批量轉docx

        最近碰到了doc文檔需要批量轉為docx的需求,手工轉效率太慢,經多方研究找到了一個很不錯的方法: 首先,打開一個空白word,按住ALT+F11,彈

        淘寶關鍵詞指數怎么批量查詢?怎么優化詞?

        淘寶關鍵詞指數是什么朋友比較迷惑的地方之一,很多賣家朋友可能不知道這個指數指的是什么意思,怎么批量查詢等等,其實這方面的信息,se

        批量大氣校正高分2號(GF2)衛星數據

        高分數據批量處理可以有下述5種選項。 MSS數據的批量正射校正 MSS數據批量正射校正和大氣校正 PAN 數據的批量正射校正 MSS與P

        淘寶聯盟選品庫怎么批量推廣?選品庫是做什么的?

        選品庫其實是指你把具有相同屬性的商品放置于一起,然后選擇性就會豐富很多,現在淘寶聯盟就有一個選品庫,大家知道淘寶聯盟選品庫怎么

        Excel表格中如何批量取消超鏈接

        Excel表格中取消超鏈接的方法非常簡單,我們只需選中鏈接后單擊右鍵,然后在彈出菜單中選擇&ldquo;取消超鏈接&rdquo;即可。但如果表

        分享到:

        欄目導航

        推薦閱讀

        熱門閱讀

        xxxcom日本黄色|成人电影一级毛片播放|制服丝袜人气女优无码亚洲|亚洲日韩无码在线|

        1. <th id="92sxj"></th>
          <li id="92sxj"><tr id="92sxj"><cite id="92sxj"></cite></tr></li><button id="92sxj"><acronym id="92sxj"><input id="92sxj"></input></acronym></button>
            <dd id="92sxj"><noscript id="92sxj"></noscript></dd>

            <rp id="92sxj"><object id="92sxj"></object></rp>