2017-04-05 27 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();