【问题标题】:Java MySql Coumn not found未找到 Java MySql 列
【发布时间】:2013-08-22 08:08:49
【问题描述】:

喂!我正在使用 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") );
        } 

【问题讨论】:

    标签: java mysql resultset


    【解决方案1】:

    你需要一个Map&lt;Integer,Collection&lt;String&gt;&gt;&gt;

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      在 while 循环金枪鱼酱之前 PopisJela 是空的。

      在迭代并放入 hashmap 时

      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>();

      ...

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

      ...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-27
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 2011-08-24
        • 2015-08-20
        • 1970-01-01
        相关资源
        最近更新 更多