JDBC運行SQL聲明,有兩個處理接口,一PreparedStatement,Statement,一般程序JDBC有多少仍然比較PreparedStatement
?
只要運行批處理,PreparedStatement少一點Statement
?
ps = conn.prepareStatement(sql);
for(int i = 0;i<10;i++){
?? ps.setString(1,"1");
//PreparedStatement批處理方式一
?? ps.addBatch();
}
//PreparedStatement批處理方式二
ps.addBatch("靜態SQL");
ps.executeBatch();
這個是正常運行的
?
但是把PreparedStatement放到里面就沒效了,下面:
for(int i = 0;i<10;i++){
?? ps = conn.prepareStatement(sql);
?? ps.setString(1,"1");
?? ps.addBatch();
}
?
ps.executeBatch();
?
?
Statement適合循環賦值到sql,代碼下面:
?
Statement st = conn.createStatement();
for(int i = 0;i<10;i++){
?? st.addBatch("靜態sql..........");
}
st.executeBatch();
這個是正常運行全部的語句
?
?
?
?
總結:造成這種原因是
Statement st = conn.createStatement();這里能夠不放SQL語句
ps = conn.prepareStatement(sql);這個一定要放初始SQL語句
JDBC的批處理不能增加select語句,否則會拋異常:
java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate().
??at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)
?
?
?