【问题标题】:How to Store MySQL query into Java array?如何将 MySQL 查询存储到 Java 数组中?
【发布时间】:2013-04-01 11:28:04
【问题描述】:

我在网上找到了将查询到的数据存储到 ArrayList 中然后将 ArrayList 转换为 Array 的建议。下面是我拥有的代码,看来我没有正确执行此操作。 SQL 语法是正确的(我在我的 MySQL 中测试过)。任何有关如何更正我的代码的建议都会有所帮助,谢谢!

public static void dxNameExerciseID(){
    //String dxName = name;
    //String result = null;

    try{
        con = DriverManager.getConnection(url, user, password);  
        pst = con.prepareStatement("SELECT * FROM exercise,condition_exercise,diagnosis WHERE exercise.exercise_id = condition_exercise.exercise_id_fk AND condition_exercise.diagnosis_id_fk = diagnosis.diagnosis_id AND diagnosis.diagnosis_name = 'Adductor Strain';");
        rs = pst.executeQuery();  

        ArrayList<String> list= new ArrayList<String>();
        while (rs.next()) {
            list.add(rs.getString("exercise_id"));

            String[] result = new String[list.size()];
            result = list.toArray(result);

            for(int i =0; i<result.length; i++){
                System.out.println(result[i]);
            }   
        }   

    }catch(SQLException ex){
    }finally {
        try {
            if (rs != null){
                rs.close();
            }
            if (pst != null){
                pst.close();
            }
            if (con != null){
                con.close();
            }
        }catch(SQLException ex){
        }
    }

//return result;  

}

【问题讨论】:

    标签: java mysql arrays


    【解决方案1】:

    这应该会更好。了解如何通过迭代 ResultSet 来首次创建字符串数组列表,一旦列表完成,您就可以创建字符串数组。

    ArrayList<String> list= new ArrayList<String>();
    while (rs.next()) {
        list.add(rs.getString("exercise_id"));   
    } 
    
    String[] result = new String[list.size()];
    result = list.toArray(result);
    
    for(int i =0; i<result.length; i++){
        System.out.println(result[i]);
    }
    

    顺便说一句:你的 finally 块是不安全的。如果 rs.close() 失败,您将不会关闭连接。

    【讨论】:

    • 谢谢!如何保护我的“最终”块?我还是个初学者。
    • 您需要将每个 xxx.close() 包装在它自己的 try/catch 中,以确保如果一个失败它不会停止执行并让所有其他资源打开。看看这个:stackoverflow.com/questions/4507440/…
    • 谢谢,那个链接解释得很好。
    【解决方案2】:

    各方面的代码都很糟糕。捕获块永远不应为空。您错误地关闭了资源。如果出了问题,你怎么知道?传递连接,不要让方法负责获取它。使用 PreparedStatement。这段代码应该被扔掉,这样你就可以重新开始了。

    【讨论】:

      【解决方案3】:

      这应该可行 - 您在每个 iteration 上创建 Array,这是您的问题的原因

      while (rs.next()) {
             list.add(rs.getString("exercise_id")); 
      }   
      
      String[] result = new String[list.size()];
      result = list.toArray(result);
      for(int i =0; i<result.length; i++){
            System.out.println(result[i]);
      } 
      

      【讨论】:

      • 我只是错过了“}”,所以一切都在“while”循环中迭代吗?我还是个初学者,谢谢!
      【解决方案4】:

      你的一些代码应该被重构

          ArrayList<String> list= new ArrayList<String>();
          while (rs.next()) {
              list.add(rs.getString("exercise_id"));
      
      
          }  
           String[] result = new String[list.size()];
              result = list.toArray(result);
      
              for(int i =0; i<result.length; i++){
                  System.out.println(result[i]);
              }   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-25
        • 2016-10-29
        • 1970-01-01
        • 2018-02-21
        • 2016-12-25
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多