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