[英]JDBC Call to Oracle Stored Procedure with parameters of type PL SQL table
[英]JDBC result set from an Oracle PL/SQL stored procedure
oracleClose()和oracleCloseQuery()在sqlj.runtime.ExecutionContext.OracleContext中做什么。
由于我们在finally块中使用oracleClose()
将jdbc驱动程序jar升级到ojdbc5.jar
,因此,当使用resultset.next()
而不是oracleCloseQuery()
时,会出现以下异常。 使用oracleCloseQuery()
是否安全? 该数据库是Oracle 11g和WAS 6.1.XX,感谢您的答复。 这是错误消息:
java.sql.SQLException:已关闭语句:下一步位于oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131)处的oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261)中的.DatabaseError.throwSqlException(DatabaseError.java:197)oracle.jdbc中的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
。 这表示您正在执行Statement
的try
块之外使用ResultSet
,并且您可能使用ResultSet
作为方法的返回值。 这是一个坏习惯 。
我建议您重写JDBC代码,以便在执行Statement
同一try
块中处理ResultSet
,或者该方法返回类似List<Entity>
而不是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;
}
顺便说一句,您这里不需要Oracle JDBC驱动程序特定的类/方法。 全部都是java.sql.*
。 这样,您就可以使JDBC代码在数据库之间可移植。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.