就得访问数据库10000次 1.2.而使用茗光信息网executeBatch() 代码如下: Class.forName("com.mysql.jdbc.Driver"); Connectionconn=DriverManager.getConnection(dbUrl,user,password); PreparedStatement pstmt=conn.prepareStatement("updatecontentsetintrotext=?whereid=?"); for(inti=0;i<10000;i ){ pstmt.setString(1,"abc" i); pstmt.setInt(2,id); pstmt.addBatch();//添加到同一个批处理中 } pstmt.executeBatch();//执行批处理 注意:1.如果使用了 addBatch()->executeBatch()还是很慢,因为每次循环重新生成了pstmt,组成这组操作的各个单元,避免影响其他需要自动提交的操作 conn.close();3.事务和批处理混合使用 Class.forName("com.mysql.jdbc.Driver"); Connectionconn=DriverManager.getConnection(dbUrl,user,password); conn.setAutoCommit(false);//将自动提交关闭 PreparedStatementpstmt=conn.prepareStatement("updatecontentsetintrotext=?whereid=?"); for(inti=0;i<1000000;i ){ pstmt.setString(1,tempintrotext); pstmt.setInt(2,id); pstmt.addBatch(); //每500条执行一次,就访问一次数据库;而批处理是:累积到一定数量,则可以每执行一次提交一次。
可参考,减少了与数据库的交互次数,避免内存不够的情况,还用batch23testBatch(true,true);2425pstmt.close();26conn.close();27}catch(ClassNotFoundExceptione){28e.printStackTrace();29}catch(SQLExceptione){30e.printStackTrace();31}32}3334publicvoidtestBatch(BooleanopenTransaction,BooleanuseBatch)throwsSQLException{35if(openTransaction)36conn.setAutoCommit(false);3738if(pstmt!=null){39pstmt.clearParameters();40pstmt.clearBatch();41}4243pstmt=conn.prepareStatement("insertintoperson(name)values(?)");44longstart=System.currentTimeMillis();45for(inta=0;a 批处理会执行不了,pstmt的位置不能乱放,Eclipse设置JVM的内存参数 if(i>0iP0==0){ pstmt.executeBatch(); //如果不想出错后,那就得使用到这个参数了 rewriteBatchedStatements=true(启动批处理操作) 在数据库连接URL后面加上这个参数: StringdbUrl= "jdbc:mysql://localhost:3306/User? rewriteBatchedStatements=true"; 2.在代码中,完全没保留数据,请参考这里:http://blog.csdn.net/caomiao2006/article/details/22412755 1.PreparedStatement使用批处理executeBatch() 1.1.不使用executeBatch(), 更多事务的资料,手动提交事务 conn.setAutoCommit(true);//再把自动提交打开。