我正在
java.sql.SQLException:批处理期间发生错误:批处理必须是 执行或清除
在下面的代码中。我想执行两个查询。
String sql_query="insert into m_status values(20,'test');select * from m_user";
String query1 = sql_query.toUpperCase();
String[] results = query1.split(";");
stmt = conn1.createStatement();
conn1.setAutoCommit(false);
for (int i = 0; i < results.length; i++) {
if(results[i].startsWith("SELECT")) {
rs1 = stmt.executeQuery(results[i]);
}
else if(results[i].startsWith("INSERT")){
stmt.addBatch(results[i]);
}
}
int [] updateCounts = stmt.executeBatch();
conn1.commit();
if (rs1 != null)
rs1.close();
if (stmt != null)
stmt.close();
if (conn1 != null)
conn1.close();
答案 0 :(得分:2)
使用两个语句,一个用于选择查询,另一个用于更新。 executeQuery
检查是否有Statament
批处理,如果是,则抛出该错误。此外,将查询包装在try-catch-finally
块中并关闭finally块中的资源。实际上,您的代码可能会导致连接泄漏。
答案 1 :(得分:1)
您测试查询是否以大写SELECT开头,而不是这种情况。因此,您的两个查询将添加到批处理语句中。 你可以用
com.mysql.jdbc.StringUtils.startsWithIgnoreCase(results[i], "select");
答案 2 :(得分:0)