是啥导致了这个“无效的游标状态”错误?
Posted
技术标签:
【中文标题】是啥导致了这个“无效的游标状态”错误?【英文标题】:What causes this "invalid cursor state" error?是什么导致了这个“无效的游标状态”错误? 【发布时间】:2011-12-09 17:47:19 【问题描述】:运行此代码时出现“无效光标状态”错误。
我使用此代码从 Access 数据库中获取结果集,然后将其存储在表中。
这段代码只是为了从结果集中获取数据:
data=new Object[numberOfRows][numberOfColumns];
for(int i=0;i<numberOfRows;i++)
int j=0;
while(j<numberOfColumns)
// int colType=rsmd.getColumnType(j+1);
// System.out.println(colType);
data[i][j]=rs.getInt("course_id");
System.out.print("0th: "+data[i][j]+" ");
j++;
data[i][j]=rs.getString("course_name");
System.out.print("1st:"+data[i][j]+" ");
j++;
data[i][j]=rs.getString("course_date");
System.out.print("2nd:"+data[i][j]+" ");
j++;
data[i][j]=rs.getString("course_number");
System.out.print("3rd: "+data[i][j]+" ");
j++;
System.out.print("j:"+j);
System.out.print("Done line:"+i);
【问题讨论】:
看起来你有一些有用的调试输出。请将其包含在您的问题中。 【参考方案1】:我认为主要问题是您从不调用rs.next()
来滚动光标。但是,根据您对记录结构的说明,您的 while
循环似乎也很混乱。请尝试以下操作:
data=new Object[numberOfRows][numberOfColumns];
for(int i=0;i<numberOfRows;i++)
if (!rs.next())
throw new IllegalStateException();
int j=0;
// int colType=rsmd.getColumnType(j+1);
// System.out.println(colType);
data[i][j]=rs.getInt("course_id");
System.out.print("0th: "+data[i][j++]+" ");
data[i][j]=rs.getString("course_name");
System.out.print("1st:"+data[i][j++]+" ");
data[i][j]=rs.getString("course_date");
System.out.print("2nd:"+data[i][j++]+" ");
data[i][j]=rs.getString("course_number");
System.out.print("3rd: "+data[i][j++]+" ");
while(j<numberOfColumns)
data[i][j]=rs.getString(j + 1);
System.out.print(j+"th: "+data[i][j++]+" ");
System.out.println();
System.out.println("Done line:"+i);
【讨论】:
我有一张名为 "course" 的表,该表包括 4 个字段,分别是: "course_id" ,"course_name" ,"course_date" 和 "course_number" >> 这是我的表的样子: course_id course_name course_date course_number data data data data >> 我的表格如下所示: course_id course_name course_date course_number data data data data data data data data data data data data data data 我使用第一个循环来获取行数和我使用第二个循环来获取列数,这将有助于了解每行中的列数。我不明白为什么我不需要它,如果我不使用它,我将无法获取数据! @GhadeerWalid 我现在了解您的结构。这不是我从你的代码中猜到的。我会更新我的答案。 非常感谢它的工作!但是您能否为我解释一下这一行:rs.getInt(1)
而不是rs.getInt("course_id")
。由于我不知道您的“额外”数据列的名称,因此我只使用它们的索引;加一会将基于 0 的数组索引 j
转换为基于 1 的 JDBC 索引。而且几乎任何数据类型的列都可以作为String
检索,所以我使用getString()
方法来获取每个字段。以上是关于是啥导致了这个“无效的游标状态”错误?的主要内容,如果未能解决你的问题,请参考以下文章