2012-04-14 20 views
1

我正在运行一个Java方法来调用Oracle 11.2数据库中的存储过程。我正在使用JDBC连接调用具有OUT参数的存储过程,以将数据库游标作为结果集返回给java方法。一切工作正常。Java和数据库:关于使用多个ResultSet和游标

现在我想返回第二个结果集到SAME存储过程中的java方法。如果我只是将第二个OUT参数添加到此存储过程并打开第二个游标,则所有内容似乎都可以正常工作。

我想知道如果这是正确的做法,因为两个游标都是简单地在存储过程中打开,依靠java方法关闭它们。

由于第一个光标是OPEN ed,之后选择了一些东西,然后第二个光标是OPEN,选择了不同的东西,会导致游标或结果集出现问题吗?选择的第二个东西是否会搞砸所选的第一个东西,反之亦然?或者数据库足够聪明,知道何时打开第二个光标,是否有新的选择指向它,而不是第一个光标打开?

我对这一切都很陌生,只是想检查它是如何将多个游标返回到java中的相应结果集。感谢您的任何意见。

回答

2

两个游标都是完全不同的实体,它们指向完全不同的查询,它们返回完全不同的SCN的结果。所以不存在数据库混淆的风险。您的Java代码将单独获取需要从单独获取的ResultSet对象,因此您的代码需要确保它从正确的ResultSet获取 - 如果有任何混淆,它更可能是代码中的一个错误,在所有情况下都从错误的光标中提取或未能关闭两个游标。

虽然技术上很可能从存储过程中返回多个游标,但我倾向于怀疑存在更好的解决方案。大多数情况下,如果有多个相关的游标,这意味着调用代码是手动编码某种连接操作。如果是这种情况,那么让Oracle进行加入并返回一个REf CURSOR会更好。

+0

完美,谢谢Justin! – ggkmath 2012-04-14 21:37:11