3

我在网上找到了将查询到的数据存储到 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;  

}

4

4 回答 4

3

这应该会更好。了解如何通过迭代 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() 失败,您将不会关闭连接。

于 2013-04-09T20:42:23.120 回答
0

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

于 2013-04-09T20:42:42.443 回答
0

这应该有效-您正在创建Array每个iteration问题的原因

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]);
} 
于 2013-04-09T20:43:29.080 回答
0

你的一些代码应该被重构

    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]);
        }   
于 2013-04-09T20:43:36.247 回答