Java 这是什么原因造成的;无效的游标状态“;错误?
运行此代码时出现“无效光标状态”错误 我使用此代码从Access数据库获取结果集,然后将其存储在表中 此代码段仅用于从结果集中获取数据: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
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()
方法来获取每个字段。