2

このコードは、最初の行を除くすべての行を返します。私はそれの何が悪いのかわかりませんか?最初のものを含めるにはどうすればよいですか?

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");
    }
}
4

5 に答える 5

2

あなたはres.next()2回電話しています-ここで1回:

if (res.next())

そして一度ここに:

while (res.next())

ifステートメントとステートメントの間whileで、最初の行を「見て」いますが、whileループ本体に入る頃には、すでに 2 行目にいます。

最も簡単な修正は、おそらく次のように変更することです。

while (res.next())
{
}

に:

do
{
} while (res.next());
于 2013-04-14T21:08:15.377 に答える
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");
 }
}
于 2013-04-15T15:06:23.497 に答える
0

ResultSetを呼び出すと、あなたは動いていますif(res.next)

これは、ループに入ったときに、すでに 1 行下にいることを意味します。

ループを do-while に変更します

do {

} while (res.next());

これにより、 への最初のループ呼び出しのにコードが実行されnextます。

于 2013-04-14T21:09:06.870 に答える
0

res.next()結果セットを自動的に移動します。ステートメントで最初に呼び出し、行を出力する前ifにもう一度ステートメントでwhile呼び出します。何かを出力する前に 2 回呼び出しているため、最初の行がありません。

whileを aに変更するdo..whileと、これは希望どおりに行われます。

于 2013-04-14T21:09:38.790 に答える