まず、データベース内の説明をさせて頂きます。
MENUとCOLORという名前のテーブルがあり、MENU内にはIdとItemというカラム。COLOR内にはColorId とColorというカラムが存在します。MENUとCOLORは1:Mの関係にあり、それぞれのItem は複数のColorを保持している状態です。
そこで質問なのですが、全てのItemと、そのItemが保持する全てのColorを表示させる方法をご教授頂けませんでしょうか。
表示方法は Item, Color, Color, Color のように一つのItemが一行になるように。
MenuDB クラスのreadColorメソッドでColorを採取。MenuクラスのaddColorメソッドで複数のColorをコレクトし、同じくMenuクラスのgetColorsメソッドをMenuMainクラスから呼び出して表示…という手順のハズなのですが、呼び出したItemとColorをリンクさせる方法がわかりません。もしかしたらMenu内のコンストラクタも変える必要があるのでしょうか…。
以下のコードは省略部分、スペルミスも含め、正常に動いているものとして頂いて大丈夫です。
長々となりますが、3ファイル、以下に記載します。
宜しくお願い致します。
MenuMain.java
public class MenuMain {
public static void main(String[] args) {
MenuDB mdb = new MenuDB();
List<Menu> menu = mdb.getMenu();
System.out.println("All Menu:"); for (Menu allMenu: menu){ System.out.println("Item: " + allMenu.getItem() + " Color: " + ここにコレクトした複数のカラーを表示させるコード ); //もしかしたら、output は別にする必要があるのでしょうか…? } }
}
MenuDB.java
public class MenuDB {
-略-
private static final String GET_MENU_SQL = "SELECT * FROM MENU";
private static final String GET_MENU_COLOR_SQL = "SELECT * FROM MENU_COLOR WHERE MenuId = ?";
-略- private List<Menu> readMenu() { List<Menu> menu = new ArrayList<>(); try ( Connection connection = getConnection(); PreparedStatement stmt = connection.prepareStatement(GET_MENU_SQL); ResultSet rs = stmt.executeQuery() ) { while (rs.next()) { menu.add(new menu(rs.getInt("Id"), rs.getString("Item"))); } } - 略 catch(){ } - return menu; } private void readColor() { try ( Connection connection = getConnection(); PreparedStatement stmt = connection.prepareStatement(GET_MENU_COLOR_SQL); ) { for (Menu m: menu) { stmt.setInt(1, m.getId()); ResultSet rs = stmt.executeQuery(); while(rs.next()){ // rs.getString(“Color”) をどうすれば、上のreadMnuメソッドのデータと //リンクする事が出来るのでしょう? } rs.close(); } } - 略 catch(){ } – } public List<Menu> getMenu() { return menu; }
}
Menu.java
private String color;
private List<String> colors;
public Menu (int id, String item) { this.id = id; this. item = item; }
//ここのaddColor()とgetColors()の中身は正解かどうかわからないです。
public void addColor (String color){
colors = new ArrayList<>();
colors.add(color);
}
public String getColors() { return colors.toString(); } public int getId() { return id; } public String getItem() { return item; }
}
-------------------------------------------------------------以上
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/02 10:42
2015/11/02 12:07
2015/11/04 12:34