for(int i = 0; i<tables.size();i=i+2){
sql_insert = "insert into "+tables.get(i)+" (select * from "+tables.get(i+1)+" where cid = ? )";
sql_delete = "delete from "+tables.get(i+1)+" where cid = ?";
pstmt = conn.prepareStatement(sql_insert);
pstmt.setString(1, cid);
pstmt.execute();
pstmt.clearParameters();
pstmt = conn.prepareStatement(sql_delete);
pstmt.setString(1, cid);
pstmt.execute();
}上面的这些语句我想一次运行完,看了一下有个addBatch()
不知道可不可以改成for(int i = 0; i<tables.size();i=i+2){
sql_insert = "insert into "+tables.get(i)+" (select * from "+tables.get(i+1)+" where cid = ? )";
sql_delete = "delete from "+tables.get(i+1)+" where cid = ?";
pstmt = conn.prepareStatement(sql_insert);
pstmt.setString(1, cid);
pstmt.addBatch();
pstmt.clearParameters();
pstmt = conn.prepareStatement(sql_delete);
pstmt.setString(1, cid);
pstmt.addBatch();
}
pstmt.execute();最后一次运行commit();
sql_insert = "insert into "+tables.get(i)+" (select * from "+tables.get(i+1)+" where cid = ? )";
sql_delete = "delete from "+tables.get(i+1)+" where cid = ?";
pstmt = conn.prepareStatement(sql_insert);
pstmt.setString(1, cid);
pstmt.execute();
pstmt.clearParameters();
pstmt = conn.prepareStatement(sql_delete);
pstmt.setString(1, cid);
pstmt.execute();
}上面的这些语句我想一次运行完,看了一下有个addBatch()
不知道可不可以改成for(int i = 0; i<tables.size();i=i+2){
sql_insert = "insert into "+tables.get(i)+" (select * from "+tables.get(i+1)+" where cid = ? )";
sql_delete = "delete from "+tables.get(i+1)+" where cid = ?";
pstmt = conn.prepareStatement(sql_insert);
pstmt.setString(1, cid);
pstmt.addBatch();
pstmt.clearParameters();
pstmt = conn.prepareStatement(sql_delete);
pstmt.setString(1, cid);
pstmt.addBatch();
}
pstmt.execute();最后一次运行commit();
1.将sql语句的定义放到for之外,且都用?替代参数;
2.将pstmt = conn.prepareStatement(sql_insert); 放到for之外;
3.prepareStatement实际上是针对相同SQL,不同参数进行优化并提供BATCH特性的,因此你的insert和delete应分别建立prepareStatement;
4.for体内只保留与pstmt.set***相关的操作,其它remove掉;
看来只能用Statement来实现了