假设有一些 Oracle PL/SQL 过程,它接收 IN 参数并返回 OUT 游标参数。我有一个执行此过程的 jdbc 代码:
DataSource dataSource;
//datasource was set
CallableStatement statement = null;
ResultSet result = null;
ResultSet secondaryResult = null;
Connection connection = null;
try {
connection = dataSource.getConnection();
statement = connection.prepareCall("{? = call pl_sql_func(?)}");
statement.registerOutParameter(1, OracleTypes.CURSOR);
statement.setString(2,"param");
// !
secondaryResult = statement.executeQuery();
secondaryResult.close();
result = (ResultSet) statement.getObject(1);
while(result.next()){
//get some data
}
} catch (Exception ex){
}
finally{
//closing statement, result, secondaryResult and connection
}
我尝试执行这段代码,发现 secondaryResult 没有数据,但 result 有。这是正常的,但谁能解释一下
1) statement.executeQuery()
真正产生了什么?
2) 语句产生过程调用时,返回的ResultSet是否可以包含数据?或者它总是空的?
P.S.可能的优化不是这个问题的目标。我希望按原样解释代码。
最佳答案
您的语句在输出参数中获取结果。根据 Oracle 教程 http://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html#create_jdbc_mysql这是获取 ResultSet 作为 CallableStatement.executeQuery 返回值的方法
statement = connection.prepareCall("{call pl_sql_func(?)}");
这个例子是针对 MySQL 的,但是思路很清晰。
关于java - 什么通过函数调用返回 CallableStatment.executeQuery()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18501795/