Lal*_*tha 2 java oracle jdbc oracle11g
oracleClose()和oracleCloseQuery()在sqlj.runtime.ExecutionContext.OracleContext中做了什么.
由于我们升级JDBC驱动程序罐子ojdbc5.jar与oracleClose()在finally块使用时,我们得到以下的异常resultset.next(),而不是用oracleCloseQuery().使用安全吗oracleCloseQuery()?数据库是Oracle 11g和WAS 6.1.XX感谢您的回复.这是错误消息:
java.sql.SQLException:Closed语句:下一个位于oracle.jdbc.driver上的oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131) .databaseError.throwSqlException(DatabaseError.java:197)位于oracle.jdbc的oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261)oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:269). com.westgroup.pubsvc.rms.models.ResultSetSRC.getNextResult(ResultSetSRC.java:112)中的driver.OracleResultSetImpl.next(OracleResultSetImpl.java:205)
例外情况是告诉您,当您尝试迭代时,已经关闭了Statement返回ResultSet的内容ResultSet.这表明,你正在使用ResultSet 外的try其中块Statement的被执行,并且你可能使用ResultSet作为方法的返回值.这是一种不好的做法.
我建议你重写你的JDBC代码,以便ResultSet在执行时在同一个try块中处理Statement,或者方法返回类似于List<Entity>而不是a的方法ResultSet.
这是正确的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;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这里不需要Oracle JDBC驱动程序特定的类/方法.这一切都很公正java.sql.*.这样可以使JDBC代码在数据库之间保持可移植性.