我正在开发一个项目,该项目将有许多语句连接到数据库 我想重用语句而不是每次连接都创建新语句 最重要的是我不想在使用后关闭每个结果集
我想在重用之前关闭语句上的结果集
我的代码看起来像这样
ArrayList<Statement> BackStatements = new ArrayList();
int lastStatementIndex = 0;
private Statement GetStatement() throws SQLException {
Statement SM;
int MaxStatements = 5;
if (BackStatements.size() < MaxStatements) {
SM = Connection.createStatement();
BackStatements.add(SM);
lastStatementIndex = BackStatements.size() - 1;
} else {
lastStatementIndex = lastStatementIndex + 1;
if (lastStatementIndex == MaxStatements) {
lastStatementIndex = 0;
}
SM = BackStatements.get(lastStatementIndex);
/// i want to close resultset generated by SM now and i do this before return this SM
SM.getResultSet().close();
}
System.out.println("Last Index:" + lastStatementIndex + "---- Size:" + BackStatements.size());
return SM;
}
但是此方法通过记录器返回此错误
Caused by: java.sql.SQLException: ResultSet already requested
最佳答案
总的来说,这是个坏主意。语句是一个接口(interface),实际的类可以是 JDBC 驱动程序返回的任何内容。 一般来说,您不能将一个语句类重用于另一种类型。例如, CallableStatement 和PreparedStatement(对于oracle JDBC)不兼容。
对于 ResultSet,关闭它会释放数据库游标,至少在某些情况下是这样。推迟 resultSet.close() 会对数据库服务器容量产生负面影响。
一般来说,如果您的 JDBC 驱动程序支持连接池,那么就应该这样做。一般来说,网络往返比创建语句的成本要高得多。
关于java - 如何重用 JDBC 语句并自动关闭结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44922265/