2017-04-05 4 views
1

내가 된 getMetaData()하지만, 메신저,이 오류를 몇 가지 문제가 점점 함께 Ucanacces를 사용하는 것을 시도하고있다 올바르지 않습니다 :된 getMetaData() -> 커서의 상태는 내가 정보를 표시 할 때

오류 de SQLException : net.ucanaccess.jdbc.UcanaccessSQLException : UCAExc ::: 4.0.1 커서가 잘못되었습니다. 커서가 커서를 가리 키지 않았습니다. 업데이트, 삭제, 설정, O : GET :; Posición 실제 델 resultado 드 라 CONSULTA 에스 앤티 델 프라이머 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() 메서드를 호출하여 호출 할 수 있습니다. 방법 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();