oracleClose()和oracleCloseQuery()在sqlj.runtime.ExecutionContext.OracleContext中做了什么。
由于我们在finally块中使用ojdbc5.jar
将jdbc驱动程序jar升级到oracleClose()
,因此在使用resultset.next()
而不是oracleCloseQuery()
时会出现以下异常。使用oracleCloseQuery()
是否安全。该数据库是Oracle 11g和WAS 6.1.X.X.感谢您的回复。
以下是错误消息:
java.sql.SQLException:Closed语句:next at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:197) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:269) at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:205) 在com.westgroup.pubsvc.rms.models.ResultSetSRC.getNextResult(ResultSetSRC.java:112)
答案 0 :(得分:6)
该异常告诉您,当您尝试迭代Statement
时,已返回此ResultSet
的{{1}}已被关闭。这表示您正在使用ResultSet
外 ResultSet
块,其中try
已被执行且您可能正在使用Statement
作为方法的返回值。这是一种不良做法。
我建议你重写你的JDBC代码,以便ResultSet
在与执行ResultSet
完全相同的try
块中处理,或者方法返回像Statement
而不是List<Entity>
。
这是正确的JDBC习语的启动示例:
ResultSet
顺便说一下,这里不需要Oracle JDBC驱动程序特定的类/方法。这一切都只是public List<Entity> list() throws SQLException {
// Declare resources.
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
List<Entity> entities = new ArrayList<Entity>();
try {
// Acquire resources.
connection = database.getConnection();
statement = connection.createStatement("SELECT id, name, value FROM entity");
resultSet = statement.executeQuery();
// Gather data.
while (resultSet.next()) {
Entity entity = new Entity();
entity.setId(resultSet.getLong("id"));
entity.setName(resultSet.getString("name"));
entity.setValue(resultSet.getInteger("value"));
entities.add(entity);
}
} finally {
// Close resources in reversed order.
if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}
// Return data.
return entities;
}
。这样就可以使JDBC代码在数据库之间保持可移植性。