因为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);求助?如果有关,该如何写
本人代码如下:
//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);求助?如果有关,该如何写
主要还是要优化数据库,并且尽量优化SQL。有条件可以改变数据库去做多台数据库平衡。
另外没有必要每次提交创建。不过为了附上底层的Socket超时,几小时应该重新创建connection,同时创建stmt.