2013-04-14 65 views
2

該代碼返回除第一行之外的每一行。我看不出它有什麼問題?我如何使它包括第一個?ResultSet元數據不返回第一行

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循環體時,你已經在第二行了。

最簡單的修復很可能會發生變化:

while (res.next()) 
{ 
} 

要:

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

你,當你調用if(res.next)沿着移動ResultSet

這意味着當你進入你的循環時,你已經是一排了。

你的循環更改爲一個做而

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的指數不爲零。因此 開始如果您還沒有宣佈的ResultSet全球則必須寫在下面的方法: 的ResultSet RES = NULL; 否則會起作用。