Java ResultSet.getNext()无法使用PreparedStatement
我正在试图弄清楚为什么在我执行SQL查询并将结果从Oracle 11g表返回到ResultSet中之后,我正在编写的Java代码中ResultSet.next()永远都不是真的。。。在java.sql.Connection中使用PreparedStatement时,代码似乎没有正确地提取返回的ResultSet的内容。感谢您的帮助,以下是详细信息: 表:Java ResultSet.getNext()无法使用PreparedStatement,java,oracle,jdbc,plsql,Java,Oracle,Jdbc,Plsql,我正在试图弄清楚为什么在我执行SQL查询并将结果从Oracle 11g表返回到ResultSet中之后,我正在编写的Java代码中ResultSet.next()永远都不是真的。。。在java.sql.Connection中使用PreparedStatement时,代码似乎没有正确地提取返回的ResultSet的内容。感谢您的帮助,以下是详细信息: 表: CREATE TABLE "SHANDB"."ABSCLOBS" ( "ID" NUMBER, "XMLVAL"
CREATE TABLE "SHANDB"."ABSCLOBS"
( "ID" NUMBER,
"XMLVAL" "XMLTYPE",
"IDSTRING" VARCHAR2(20 BYTE)
)
数据:
上述代码的这一部分从未运行过,我不理解:
while(rowsUpdated.next()){
String clobxml = rowsUpdated.getString(1);
System.out.println(clobxml);
}
。。。但是,最终打印语句显示结果集不是空的:
Rows affected: oracle.jdbc.driver.OracleResultSetImpl@15f157b
有人知道为什么我不能显示实际检索到的XML clob内容,和/或为什么上面的while块从来都不是真的吗
谢谢:)您的诊断不正确-这是:
Rows affected: oracle.jdbc.driver.OracleResultSetImpl@15f157b
不显示结果集为非空。它只是显示了rowsUpdated
的值是对oracle.jdbc.driver.OracleResultSetImpl
实例的引用,该实例不重写toString()
。那很容易是空的
我怀疑问题在于您的WHERE
子句与任何记录都不匹配。为了便于诊断,我建议您将其更改为:
String selectID1 = "SELECT a.xmlval.getClobval() AS poXML FROM absclobs a";
(当然,还要去掉参数设置调用)。这样,您应该能够看到表中的所有值。然后,您可以着手发现WHERE
子句未按预期工作的原因
(顺便说一句,不清楚您为什么没有在问题代码中声明
连接
或行支持
。它们肯定是局部变量…您的诊断不正确-这是:
Rows affected: oracle.jdbc.driver.OracleResultSetImpl@15f157b
不显示结果集为非空。它只是显示了rowsUpdated
的值是对oracle.jdbc.driver.OracleResultSetImpl
实例的引用,该实例不重写toString()
。那很容易是空的
我怀疑问题在于您的WHERE
子句与任何记录都不匹配。为了便于诊断,我建议您将其更改为:
String selectID1 = "SELECT a.xmlval.getClobval() AS poXML FROM absclobs a";
(当然,还要去掉参数设置调用)。这样,您应该能够看到表中的所有值。然后,您可以着手发现WHERE
子句未按预期工作的原因
(顺便说一句,不清楚您为什么没有在问题中的代码中声明
connection
或rowsUpdated
。它们肯定应该是局部变量…该行如何告诉您结果集不是空的?即使空结果集是驻留在内存地址的对象,它也没有任何行。它与null
不同。us2012是正确的。那么您是尝试了另一个查询还是直接测试了您的查询?它有行吗?这个问题太复杂了。。。也许您应该首先删除所有不相关的细节(条件等),并检查是否按预期工作。这将帮助我们大家更快地解决问题。对不起。。。我的意思是该语句返回一个值,但上面运行的代码没有返回,这我不理解:从absclobs a中选择a.xmlval.getClobval()作为poXML,其中idstring='1',id=1@模糊分析:那你为什么要介绍关于“最终打印声明”的内容呢?你试过没有WHERE条款吗?为什么INSERT语句不包含IDSTRING值?该行如何告诉您结果集不是空的?即使空结果集是驻留在内存地址的对象,它也没有任何行。它与null
不同。us2012是正确的。那么您是尝试了另一个查询还是直接测试了您的查询?它有行吗?这个问题太复杂了。。。也许您应该首先删除所有不相关的细节(条件等),并检查是否按预期工作。这将帮助我们大家更快地解决问题。对不起。。。我的意思是该语句返回一个值,但上面运行的代码没有返回,这我不理解:从absclobs a中选择a.xmlval.getClobval()作为poXML,其中idstring='1',id=1@模糊分析:那你为什么要介绍关于“最终打印声明”的内容呢?你试过没有WHERE条款吗?为什么INSERT语句不包含IDSTRING值呢?见鬼,只需对数据库运行您自己想要的调用,从absclobs a中选择a.xmlval.getClobval()作为poXML,其中IDSTRING='1'和id=1
,然后查看是否有任何返回。另外,如果您只是引用通过列索引返回的列(在本例中为1),则不需要查询的AS poXML
部分。我之前把问题搞砸了,因为我没有把IDSTRING值放入INSERT语句中,现在我已经修复了INSERT语句。问题仍然存在,SQL正确运行以返回一行,但ResultSet.next()永远都不是真的。这最终是一个奇怪的解决方案。。。每当我删除对我在Eclipse“表达式”选项卡中检查的结果集的任何引用时,上面的操作都很好。在选项卡中添加一个涉及结果集的表达式,所有内容都将被覆盖。真的很奇怪。@fuzzyananalysis:Hmm。如果toString()
耗尽了ResultSet
的话,这可能是有道理的,但不是别的。古怪的哦,好吧-至少它现在已经修复了…见鬼,只需对您的数据库运行您自己想要的调用,从absclobs a中选择a.xmlval.getClobval()作为poXML,其中idstring='1'和id=1
,然后查看是否有任何结果。另外,如果您只是引用通过列索引返回的列(在本例中为1),则不需要查询的AS poXML
部分。我之前把这个问题搞砸了,没有把IDSTRING值输入到