我的代码对于少量查询运行良好
for (int i = 0 ; i < queries.length ; i ++ ) {
PreparedStatement stmt=conn.prepareStatement(queries[i]);
if (queries[i].toUpperCase().contains("SELECT ") && !queries[i].toUpperCase().contains("CREATE ") && !queries[i].toUpperCase().contains("DROP ") && !queries[i].toUpperCase().contains("DELETE "))
{ rs=stmt.executeQuery(); }
else {stmt.executeUpdate();}
}
我猜想第16条语句出现以下错误
Exception in thread "main" java.sql.SQLException:
[Teradata][ODBC Teradata Driver] Beyond SQL_ACTIVE_STATEMENTS limit
如何增加
SQL_ACTIVE_STATEMENTS
限制我试过了
Connection conn = DriverManager.getConnection(conUrl,user,password);
conn.setHoldability(20);
conn.setClientInfo( //
最佳答案
您问错了问题。您的问题不是修改SQL_ACTIVE_STATEMENTS LIMIT
(它的btw看起来像一个常量,因此无法更改),而是在完成使用它后关闭每个语句。
public static void main(String[] args) throws SQLException {
for (int i = 0; i < queries.length; i++) {
PreparedStatement stmt = conn.prepareStatement(queries[i]);
try {
if (queries[i].toUpperCase().contains("SELECT ") && !queries[i].toUpperCase().contains("CREATE ") && !queries[i].toUpperCase().contains("DROP ") && !queries[i].toUpperCase().contains("DELETE ")) {
rs = stmt.executeQuery();
} else {
stmt.executeUpdate();
}
} finally {
stmt.close();
}
}
}
请记住,关闭语句也会关闭任何关联的
ResultSet
(顺便说一句,您在任何地方都没有声明)。