Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC结果集行为异常_Java_Sql_Jdbc_Resultset - Fatal编程技术网

Java JDBC结果集行为异常

Java JDBC结果集行为异常,java,sql,jdbc,resultset,Java,Sql,Jdbc,Resultset,我正在访问我的数据库,得到一个结果集,它告诉我当前行#是2,并调用getRow(),但在调用next()方法时,该结果集无法循环: 今天早上我花了将近一个小时试图弄清楚发生了什么,但这是我试图执行的文字代码(这是一个测试/沙盒项目,因此可能没有逻辑意义)。这种情况会发生在任何人身上吗?使用getRow()方法可以检查光标当前所在行的编号,因此对next()的调用超出了结果集的范围。尝试设置oResults.absolute(0)设置iRowCount后 标准JDBC库返回一个ResultSet,

我正在访问我的数据库,得到一个结果集,它告诉我当前行#是2,并调用getRow(),但在调用next()方法时,该结果集无法循环:


今天早上我花了将近一个小时试图弄清楚发生了什么,但这是我试图执行的文字代码(这是一个测试/沙盒项目,因此可能没有逻辑意义)。这种情况会发生在任何人身上吗?

使用getRow()方法可以检查光标当前所在行的编号,因此对next()的调用超出了结果集的范围。尝试设置
oResults.absolute(0)设置iRowCount后

标准JDBC库返回一个
ResultSet
,它不知道其中有多少行。除非
executeSQL
的实现返回一个值(该值基本上预先滚动了结果集并将所有行加载到内存中),否则您永远都不会知道行数,直到最后返回false

因此,通过检查行计数来控制程序流的尝试将永远不会起作用

其次,您的呼叫也可能是无用的。以下是javadoc所说的:

检索当前行号。第一行是数字1,第二行是数字2,依此类推。
注意:对于结果集类型仅为“前进”类型的结果集,对getRow方法的支持是可选的

JDBC驱动程序的大多数实现都是向前的(即不能通过该方法向后滚动),因此
getRow()
的结果可能没有用处

以下是您的代码的外观:

ResultSet oResults = executeSQL("SELECT * FROM widgets");

while(oResults.next())
{
    // Process rows
}

如果您仍然没有进入while循环,这意味着您的查询没有返回任何行-没有其他解释。如果不获取行是“不可能的”,那么我建议您检查连接参数以确保连接到正确的数据库(例如不连接到localhost)。

显示
executeSQL()
方法的代码,看起来它正在调用
next()
ResultSet
上的
。还应说明
executeSQL()
方法不应调用
ResultSet上的
next()
方法,或至少在返回前重置行索引。
ResultSet oResults = executeSQL("SELECT * FROM widgets");

while(oResults.next())
{
    // Process rows
}