我读到了Oracle中execute和executeQuery方法之间的差异,并看到了下面的文本
executeQuery()——这通常用于读取数据库输出将采用ResultSet的形式。通常地使用SELECT语句。
execute()--如果您不知道要使用哪种方法来执行SQL语句,则可以使用此方法。这将返回一个布尔值。符合事实的表示结果是ResultSet,FALSE表示其具有int值,该值表示受查询影响的行数。
这是我的问题。我用execute方法执行一个过程,但它只返回一个整数值。我检索的返回值如下:
stmt.execute();
output = stmt.getInteger(1);
close(stmt); // statement
close(connection); // connection
我在这里不使用ResultSet对象,因此我不会显式关闭任何类似ResultSet的对象。所以根据上面的文本,如果execute函数返回一个结果集,那么我的代码中的结果集会发生什么?它一直开着吗?如果是的话,我怎么能用那种方式把它关闭呢?
CallableStatement.getInt()
与ResultSet
无关,它与存储过程的输出参数有关。如果存储过程返回了一个游标,那么就必须使用getResultSet()
并从中处理结果。
关于关闭-关闭Statement
并不意味着所有基于它的ResultSet
也都关闭,而IIRC使用Oracle JDBC驱动程序,ResultSet
在Statement
关闭后可能确实保持打开状态。因此,如果它存在,则必须显式关闭它。