Java 这是什么原因造成的;无效的游标状态“;错误?

Java 这是什么原因造成的;无效的游标状态“;错误?,java,sql,ms-access,jdbc,Java,Sql,Ms Access,Jdbc,运行此代码时出现“无效光标状态”错误 我使用此代码从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); // Sys

运行此代码时出现“无效光标状态”错误

我使用此代码从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);
}
data=新对象[numberOfRows][numberOfColumns];

对于(int i=0;i我认为主要问题是您从未调用
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);
}
data=新对象[numberOfRows][numberOfColumns];

对于(int i=0;iIt),您似乎有一些有用的调试输出。请将其包含在您的问题中。我有一个名为“课程”的表,该表包括4个字段,分别是:“课程id”、“课程名称”、“课程日期”和“课程编号”>>以下是我的表格的外观:课程\ id课程\名称课程\日期课程\编号数据>>以下是我的表格的外观:课程\ id课程\名称课程\日期课程\编号数据数据数据我用第一个循环得到行数,我用第二个循环得到列数,这将有助于知道每行的coulmn数。我不明白为什么我不需要它,如果我不使用它,我就不需要了能够获得数据!!@GhadeerWalid我现在理解了你的结构。这不是我从你的代码中猜到的。我会更新我的答案。非常感谢你,它非常有效!但是你能为我解释一下这行代码吗:data[I][j]=rs.getString(j+1)$@GhadeerWalid JDBC API对基于1的列使用索引,而不是大多数编程语言使用的基于0的索引。因此,要获得第一列(您称之为“0”),可以使用
rs.getInt(1)
而不是
rs.getInt(“课程id”)
。因为我不知道您的“额外”的名称数据列,我只使用它们的索引;添加一个将基于0的数组索引
j
转换为基于1的JDBC索引。几乎任何数据类型列都可以作为
String
检索,因此我使用
getString()
方法来获取每个字段。