java.sql.SQLException:批处理期间发生错误:必须执行或清除批处理

时间:2012-06-14 09:17:07

标签: java java-ee jdbc

我正在

  

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();

3 个答案:

答案 0 :(得分:2)

使用两个语句,一个用于选择查询,另一个用于更新。 executeQuery检查是否有Statament批处理,如果是,则抛出该错误。此外,将查询包装在try-catch-finally块中并关闭finally块中的资源。实际上,您的代码可能会导致连接泄漏。

答案 1 :(得分:1)

您测试查询是否以大写SELECT开头,而不是这种情况。因此,您的两个查询将添加到批处理语句中。 你可以用

com.mysql.jdbc.StringUtils.startsWithIgnoreCase(results[i], "select");

答案 2 :(得分:0)

确保在使用批次时使用PreparedStatement#executeBatch()

还要确保执行

int n = preparedStatement.executeUpdate();