2017-04-05 9 views
1

ないが、このエラーを私はのgetMetaDataとUcanaccesを(使用しようとしている)が、イムは、いくつかの問題を得る:は、GetMetaData() - 私は情報を表示しようとすると、>カーソルの状態が正しい

エラーde SQLException:net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 4.0.1カーソルの位置が正しくありません。カーソルの指示がありません。カーソルがUPDATE、DELETE、SET、O GETになります。 Posición実際デルresultado・デ・ラ・consulta ESアンティ・デル・プライマーregistro

英語では、カーソルの状態が正しくない4.0.1

がUCAExc :::ことを意味しますではありません が示されたカーソル行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です。 ResultSetは、next()メソッド()の2番目の方法で呼び出すことができます。メソッドnext()は、カーソルが1行だけ前に移動し(行がある場合)、trueを返します。 ResultSetの末尾に達すると、falseが返されます。他の方法(relative(int rows)など)を使用してカーソルを移動することができます。詳細はdocumentationを参照してください。

あなたが最初の行に列名を印刷したい場合は、その後に上記のコードを置き換える:

for(int i=1;i<=numColums;i++){ 
    System.out.print(rmeta.getColumnName(i)+"\t"); 
} 
System.out.println(); 
関連する問題