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的需求,手工转效率太慢,经多方研究找到了一个很不错的方法: 首先,打开一个空白word,按住ALT+F11,弹
淘宝关键词指数是什么朋友比较迷惑的地方之一,很多卖家朋友可能不知道这个指数指的是什么意思,怎么批量查询等等,其实这方面的信息,se
高分数据批量处理可以有下述5种选项。 MSS数据的批量正射校正 MSS数据批量正射校正和大气校正 PAN 数据的批量正射校正 MSS与P
选品库其实是指你把具有相同属性的商品放置于一起,然后选择性就会丰富很多,现在淘宝联盟就有一个选品库,大家知道淘宝联盟选品库怎么
Excel表格中取消超链接的方法非常简单,我们只需选中链接后单击右键,然后在弹出菜单中选择“取消超链接”即可。但如果表