0

嗨!我正在使用 JDBC MySql Java 项目,我正在尝试将我的服务器数据库中的 int 值(Id 类别)和字符串值(膳食名称)保存在简单的 java 哈希图中。但是每次我尝试在我的哈希图中调试我的代码时,只保存特定类别餐的最后记录中的值。例如,在我的表“naziv_jela”中,我有:(膳食名称,id_category),希腊沙拉 1,金枪鱼酱 1,腌制凤尾鱼 1,生寿司 1,黑烩饭 2,番茄意大利面 2,酿蘑菇 2,意大利面almonds 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") );
        } 
4

2 回答 2

1

你需要一个Map<Integer,Collection<String>>>

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

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

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

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

于 2013-08-20T10:04:46.110 回答
0

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

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

1,金枪鱼酱 1,腌鳀鱼 1,生寿司 1,黑烩饭

在 while 循环 tuna pate PopisJela 之前是空的。

在迭代并放入哈希图时

PopisJela.put(1, "金枪鱼酱"); // 第一次迭代

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

PopisJela.put(1, "生寿司"); // 第三次迭代将值“marinated anchovies”替换为“raw sushi”

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

因此,始终只有哈希映射 PopisJela 中的最后一个值。

因此,在您的情况下,请按以下方式创建哈希图。

Map>> PopisJela = new HashMap>();

...

结果集 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"));
        }
    }

...

于 2013-08-20T11:22:12.003 回答