必威体育Betway必威体育官网
当前位置:首页 > 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;即可。但如果表

分享到:

栏目导航

推荐阅读

热门阅读