因为prepareStatement是预编译的。所以在操作大数据量是优先使用。
本人代码如下:
//rs已获得结果集
while(rs.next())
{
   a++;

if(((a+1) % 50000)==0){       
//if(a>=100000){
delPstmt.executeBatch();
insPstmt.executeBatch();
dbConn.commit();
dbConn.setAutoCommit(true);
delPstmt.close();
insPstmt.close();
dbConn.setAutoCommit(false);
delPstmt = dbConn.prepareStatement(deleteSql);
insPstmt = dbConn.prepareStatement(insertSql);
//a=0;
}
                                             while(nodeConfigIt.hasNext())
{
String fgs = (String)nodeConfigIt.next();
insPstmt.setString(1,fgs);
int i=0;
for(i=0;i<str.length;i++)
{
String value = rs.getString(str[i]);
insPstmt.setString(i+2,value);
}
insPstmt.setString(i+2,gathConfig.getGathtype());
//insPstmt.execute();
insPstmt.addBatch();
}因为每天要执行的insert和delete有数百万。所以。本人让其批量操作一次性操作5万条。不过。速度还是比较慢。查资料说创建PS会浪费很多时间。是否和本人每执行一个批次操作。创建一次PS有关呢
delPstmt = dbConn.prepareStatement(deleteSql);
insPstmt = dbConn.prepareStatement(insertSql);求助?如果有关,该如何写

解决方案 »

  1.   

    这两个东用对DB的操作是过大的,当数据大时用进就会更长,
    主要还是要优化数据库,并且尽量优化SQL。有条件可以改变数据库去做多台数据库平衡。
      

  2.   

    一次五万条?如果没有修改参数,一次200到500条是最佳的。
    另外没有必要每次提交创建。不过为了附上底层的Socket超时,几小时应该重新创建connection,同时创建stmt.
      

  3.   

    我觉得楼主应该把生成 SQL 的逻辑和执行 SQL 的逻辑分开来。