2013-04-14 5 views
2

이 코드는 모든 행을 첫 번째 행과 분리하여 반환합니다. 나는 그것이 무엇이 잘못되었는지를 볼 수 없습니까? 어떻게하면 첫 번째가 포함될 수 있습니까?ResultSet MetaData가 첫 번째 행을 반환하지 않습니다.

stmt = con.createStatement(); 

ResultSet res=stmt.executeQuery("SELECT * FROM Orders ORDER BY OrderID"); 

if (res.next()) 
{ 
    ResultSetMetaData rsmd=res.getMetaData(); 
    int columnCount=rsmd.getColumnCount(); 
    for (int i = 1; i<= columnCount; i++) { 
     columnHeading=columnHeading+"\t"+rsmd.getColumnName(i); 
    } 
    System.out.println(columnHeading); 
    while(res.next()) { 
     for (int i= 1; i<= columnCount; i++) {        
      System.out.print("\t"+res.getString(i)); 
     } 
    System.out.println("\n"); 
    } 
} 

답변

2

당신은 두 번 res.next()를 호출하고 - 한 번 여기 :

if (res.next()) 

한 번 여기에 다음 if 문과 while 문 사이

while (res.next()) 

, 당신은 "보고있는 "첫 행 -하지만 while 루프 본문에 들어가기 전에 이미 두 번째 행에 있습니다.

while (res.next()) 
{ 
} 

에 :

do 
{ 
} while (res.next()); 
0

당신은 if(res.next)를 호출 할 때 함께 ResultSet를 이동

간단한 수정은 아마 변경하는 것입니다.

이것은 루프를 입력 할 때 이미 한 행 아래 있다는 것을 의미합니다.

이이 next에 전에 코드 에게 첫 번째 루프 호출을 실행하는
do { 

} while (res.next()); 

할 - 반면에 루프를 변경

.

0

res.next()은 자동으로 결과 세트를 이동합니다. 행을 인쇄하기 전에 if 문에서 먼저 호출 한 다음 while 문에서 다시 호출하고 아무 것도 인쇄하기 전에 두 번 호출하면 첫 행이 누락됩니다.

whiledo..while으로 변경하면 원하는대로 수행 할 수 있습니다.

0

시도해보십시오. 나는 그것이 효과가 있기를 바랍니다.

stmt = con.createStatement(); 

ResultSet res=stmt.executeQuery("SELECT * FROM Orders ORDER BY OrderID"); 

if (res != null) 
{ 
ResultSetMetaData rsmd=res.getMetaData(); 
int columnCount=rsmd.getColumnCount(); 
for (int i = 1; i<= columnCount; i++) { 
    columnHeading=columnHeading+"\t"+rsmd.getColumnName(i); 
} 
System.out.println(columnHeading); 
while(res.next()) { 
    for (int i= 1; i<= columnCount; i++) {        
     System.out.print("\t"+res.getString(i)); 
    } 
System.out.println("\n"); 
} 
} 
-1

여기서 문제는 전 세계적으로 당신은 다음과 같은 방식으로 작성해야합니다 ResultSet의 선언하지 않은 경우의 ResultSet의 지수는 따라서 0 로 시작하지입니다 : = 널 의 ResultSet 고해상도; 그렇지 않으면 작동합니다.

관련 문제