2013-04-14 2 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()) 

и однажды здесь:

while (res.next()) 

Между if заявления и while заявления, вы «смотрите на «первая строка», но к тому времени, когда вы войдете в тело петли , вы уже находитесь во второй строке.

Самое простое исправление, вероятно, будет меняться:

while (res.next()) 
{ 
} 

To:

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

Вы движетесь ResultSet вместе, когда вы звоните if(res.next).

Это означает, что когда вы вводите свой цикл, вы уже имеете одну строку вниз.

Измени петлю на сделай, а

do { 

} while (res.next()); 

Это будет запускать код , прежде чем первый вызов цикла в next.

0

res.next() будет автоматически перемещать результирующий набор. Вы сначала вызываете его в операторе if, а затем снова в операторе while перед тем, как распечатать любые строки, и, когда вы вызываете его дважды, прежде чем распечатать что-либо, вам не хватает первой строки.

Измените while на do..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 не начиная с 0. Поэтому Если вы не объявили ResultSet во всем мире, то вы должны написать следующим образом: ResultSet Рез = NULL; в противном случае это сработает.