找不到Java MySql列

时间:2013-08-20 10:02:55

标签: java mysql resultset

HY!我正在使用JDBC MySql Java项目,我正在尝试从简单的java哈希映射中的服务器数据库中保存int值(Id类别)和字符串值(用餐名称)。但每次我尝试在我的哈希映射中调试我的代码时,只保存来自特定类别餐的最后记录的值。为了exapmle,在我的表“naziv_jela”我有:(餐的名称,id_category),希腊沙拉1,金枪鱼酱1,腌制凤尾鱼1,生寿司1,黑烩饭2,番茄意大利面2,酿蘑菇2,意大利面杏仁2.每餐有自己的ID,他的名字和类别ID,我只想在哈希地图中保存类别ID和用餐名称,但它始终是特定类别的最后一个值,例如在上面的8条记录中,它只保存ID = 1的行寿司和每个类别ID = 2(最后值)的杏仁面食。我不知道为什么它只保存最后的值???我需要在哈希地图中使用所有类别的所有餐点。这是我的代码:

queryZaJela="SELECT id_kategorija, naziv_hrane FROM `naziv_jela`";
Map <Integer,String>PopisJela = new HashMap<Integer, String>();

        Class.forName("com.mysql.jdbc.Driver");
        Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://"
                + "localhost:3306/room_service", "root", "");
        Statement Stat = (Statement) con.createStatement();
        ResultSet Rez = Stat.executeQuery(queryZaJela);

        while (Rez.next()) { 

            PopisJela.put(Rez.getInt("id_kategorija"), Rez.getString("naziv_hrane") );
        } 

2 个答案:

答案 0 :(得分:1)

您需要Map<Integer,Collection<String>>>

Maps为每个键存储单个值,目前您只存储一个字符串(您从数据库中读取的最后一个字符串)。您需要存储一组字符串(例如,列表),并执行以下操作:

if (map.get(id) == null) {
   map.put(id, new ArrayList<String>());
}
map.get(id).add(name);

因此,您首先检查特定密钥的初始化集合,如果不存在则创建一个。 然后根据需要填充集合。

您会找到各种开源解决方案,以使您的生活更轻松,例如Google的MultiMap

答案 1 :(得分:0)

在您的示例中,您尝试执行以下操作。

让我们只考虑第1类的结果。

1,金枪鱼头 1,腌制凤尾鱼 1,生寿司 1,黑烩饭

之前循环tuna头脑PopisJela是空的。

迭代并放入hashmap

PopisJela.put(1,“tuna pate”); //第一次迭代

PopisJela.put(1,“腌制凤尾鱼”); //第二次迭代将“tuna pate”替换为“腌制凤尾鱼”

PopisJela.put(1,“生寿司”); //第三次迭代用“生寿司”取代“腌制凤尾鱼”值

PopisJela.put(1,“黑烩饭”); //第四次也是最后一次迭代将“raw sushi”替换为“black risotto”

所以,总是你只有hashmapJela中的最后一个值。

因此,在您的情况下,按以下方式创建hashmap。

地图&GT;&GT; PopisJela =新的HashMap&gt;();

...

ResultSet Rez = Stat.executeQuery(queryZaJela);

    while (Rez.next()) { 
        if(PopisJela.get(Rez.getInt("id_kategorija") == null){
               List<String> meals = new ArrayList<String>();
               meals.add(Rez.getString("naziv_hrane"));
               PopisJela.put(Rez.getInt("id_kategorija"), meals);

         }else{
               List<String> meals = (List<String>)      PopisJela.get(Rez.getInt("id_kategorija"));
               meals.add(Rez.getString("naziv_hrane"));
        }
    }

...