2012-03-01 4 views
0

以下のコードは私のデータベースから必要な情報を取得しますが、すべての情報を出力していません。まず、私はSQLの開発者でクエリを試したので、テーブルから正しい情報をすべて取得していることを知っています。結果セットは3行を返しますが、2は印刷できますか?

3 //Number of rows 
Fish and Chips //3rd row 
Chocolate Cake //2nd row 
//Here should be 1st row 
BUILD SUCCESSFUL (total time: 2 seconds) 

をしても、それはそれは2つだけ印刷した3行があると言うものの、次のように

public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    ResultSet rs = null; 
    try { 
     conn = getConnection(); 
     String query = "SELECT menu.menu_id, menu_title, dish.dish_id, dish_name, dish_description, dish_price, menu.week_no " 
       + "FROM menu, dish, menu_allocation " 
       + "WHERE menu.active = '1' " 
       + "AND menu.menu_id = menu_allocation.menu_id " 
       + "AND dish.dish_id = menu_allocation.dish_id " 
       + "AND menu.week_no IN (09, 10, 11)"; 
     stmt = conn.createStatement(); 

     rs = stmt.executeQuery(query); 
     MenuList list = null; 
     while (rs.next()) { 
      list = new MenuList(rs); 
      System.out.println(rs.getRow()); 
     } 
     for (int pos = 0; pos < list.size(); pos++) { 
      Menu menu = list.getMenuAt(pos); 

      System.out.println(menu.getDescription()); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
     } catch (SQLException e) { 
     } 
    } 

} 

端子から出力されます。上記に問題がある場合は誰でも見ることができますか?

+0

コメント。あなたの質問を見ている人々がそれを見ないかもしれないので、答えではない何かを回答として掲示しないでください。 –

答えて

2

MenuListクラスのコードが表示されていないことを確認するのは難しいですが、ResultSetをループする必要はありません。MenuListはそれを行います。 MenuListコンストラクタとして

は、それはおそらく、そのエントリを作成するためにResultSetをループパラメータとしてrsResultSetをとります。あなたのループのwhileに既にrs.next()と呼ばれているので、MenuListは最初の結果を見逃しています。

は、私はあなたがこのすべてを交換すべきだと思う:

MenuList list = null; 
while (rs.next()) { 
    list = new MenuList(rs); 
    System.out.println(rs.getRow()); 
} 

で:あなたがあなたの質問を編集したり追加するために行うには正しいことさを追加するためのより多くの情報を持っている場合は

MenuList list = new MenuList(rs); 
0

デバッガを使用して、プログラムが何をしているのかを理解することをお勧めします。

最後の行がロードされているように見えるので、3行ある間は最後の行のみを保持します。最後の行から2つの値が得られているようです。

0
public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    ResultSet rs = null; 
    try { 
     conn = getConnection(); 
     String query = "SELECT menu.menu_id, menu_title, dish.dish_id, dish_name, dish_description, dish_price, menu.week_no " 
       + "FROM menu, dish, menu_allocation " 
       + "WHERE menu.active = '1' " 
       + "AND menu.menu_id = menu_allocation.menu_id " 
       + "AND dish.dish_id = menu_allocation.dish_id " 
       + "AND menu.week_no IN (09, 10, 11)"; 
     stmt = conn.createStatement(); 

     rs = stmt.executeQuery(query); 
     MenuList[3] list = null; 
     int idx = 0;         //Add index 
     while (rs.next()) {      
      list[idx] = new MenuList(rs);    //use index 
      idx++;          //increment index 
      System.out.println(rs.getRow()); 
     } 
     for (int pos = 0; pos < list.size(); pos++) { 
      Menu menu = list.getMenuAt(pos);//Don't know that 
                 //get menu by index 
      System.out.println(menu.getDescription()); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
     } catch (SQLException e) { 
     } 
    } 

} 
+0

掲載されているOPと同じコードの場合は削除してください。もしあなたがそれを "修正"したら、修正*を記述して*あなたの書式*を修正してください。 – Will

関連する問題