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

java.sql.SQLException:批处理期间出错:批处理必须执行或清除,java,jakarta-ee,jdbc,Java,Jakarta 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.creat

我越来越

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();
String sql_query=“插入m_状态值(20,'test');从m_用户中选择*”;
字符串query1=sql_query.toUpperCase();
String[]results=query1.split(“;”);
stmt=conn1.createStatement();
conn1.设置自动提交(错误);
for(int i=0;i
使用两条语句,一条用于选择查询,另一条用于更新
executeQuery
检查是否存在该
Statement
的批处理,如果存在,则抛出该错误。另外,将查询包装在
try catch finally
块中,并关闭finally块中的资源。实际上,您的代码可能会导致连接泄漏。

请确保在使用批处理时使用

还要确保执行

int n = preparedStatement.executeUpdate();

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

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