问题
I am getting
java.sql.SQLException: error occurred during batching: batch must be either executed or cleared
in the below code. I want to execute two queries.
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();
回答1:
Use two statements, one for select queries and another one for updates. executeQuery checks if there batches for that Statament, and if so throws that error. Also, wrap your queries in a try-catch-finally block and close the resources in the finally block. As it is, your code could lead to connection leaks.
回答2:
You test if your query begins with a uppercase SELECT and it's not the case. So your two queries are added to the batch statement. You could use
com.mysql.jdbc.StringUtils.startsWithIgnoreCase(results[i], "select");
回答3:
Make sure to use PreparedStatement#executeBatch() when using batches.
Also make sure you execute
int n = preparedStatement.executeUpdate();
来源:https://stackoverflow.com/questions/11030081/java-sql-sqlexception-error-occurred-during-batching-batch-must-be-either-exec