2017-04-05 26 views
1

我一直在尝试使用Ucanacces用的getMetaData(),但即时得到一些问题,这个错误,当我试图表明的信息:的getMetaData() - >光标的状态是不正确的

错误de SQLException:net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 4.0.1错误代码:游标指示代码不可用代码语句更新,删除,设置,GET:;职位实际德尔resultado德拉CONSULTA ES底注德尔底漆registro

在英语就意味着

UCAExc ::: 4.0.1光标的状态是不正确的:光标 表示不定位在一行UPDATE,DELETE,SET或GET 声明中。查询结果的当前位置在 首次注册之前

(对不起,我自己翻译)。

所以我觉得可能是错误的尝试,当我尝试打印它访问数据时:

 Connection connection=DriverManager.getConnection(url); 
     Statement statement=connection.createStatement(); 
     String sql= "SELECT * FROM BARCO"; 
     ResultSet result=statement.executeQuery(sql); 
     ResultSetMetaData rmeta=result.getMetaData(); 
     int numColums=rmeta.getColumnCount(); 
     for(int i=1;i<=numColums;++i){ 
      if (i>numColums){ 
       System.out.print(result.getString(rmeta.getColumnName(i))+"|");; 
      }else { 
       System.out.println(result.getString(rmeta.getColumnName(i))); 
      } 
     } 
     while(result.next()){ 
      for(int i=1;i<=numColums;++i){ 
       if(i<numColums){ 
        System.out.print(result.getString(rmeta.getColumnName(i))+"|"); 
       }else{ 
        System.out.println(result.getString(rmeta.getColumnName(i))); 
       } 
      } 

回答

3

您的问题是在这部分代码:

for(int i=1;i<=numColums;++i){ 
     if (i>numColums){ 
      System.out.print(result.getString(rmeta.getColumnName(i))+"|");; 
     }else { 
      System.out.println(result.getString(rmeta.getColumnName(i))); 
     } 
    } 

你当光标未移动到实际行时,试图从ResultSet中读取,其初始位置为-1。您可以通过调用next()方法来重复执行ResultSet(正如您在循环中在第二个中所做的那样)。方法next()将光标向前移动一行(如果有行)并返回true。当它到达ResultSet的末尾时,它返回false。您可以使用其他方法(即relative(int rows)等)定位光标。有关更多详细信息,请参阅documentation

如果你要打印的第一行的列名,然后替换上面代码:

for(int i=1;i<=numColums;i++){ 
    System.out.print(rmeta.getColumnName(i)+"\t"); 
} 
System.out.println();