2013-04-09 44 views
2

我在网上找到了建议,将查询的数据存储到ArrayList中,然后将ArrayList转换为数组。下面是我的代码,看来我没有正确地做到这一点。 SQL语法是正确的(我在我的MySQL中测试过)。有关如何更正我的代码的任何建议将有所帮助,谢谢!如何将MySQL查询存储到Java数组中?

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; 

}

回答

2

这应该更好地工作。看看你如何通过迭代你的ResultSet来首先创建你的String的ArrayList,一旦你的列表完成,你可以创建字符串数组。

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()失败,则不会关闭连接。

+0

感谢创造Array!我如何确保我的“finally”块?我仍然是这方面的初学者。 – user2221016 2013-04-09 21:07:54

+1

您需要将每个xxx.close()包装在自己的try/catch中,以确保如果出现故障,它不会停止执行并让所有其他资源打开。看看这个:http://stackoverflow.com/questions/4507440/must-jdbc-resultsets-and-statements-be-closed-separately-although-the-connection – vptheron 2013-04-09 21:11:38

+0

谢谢你,那个链接是一个很好的解释。 – user2221016 2013-04-09 21:21:29

0

各方面的代码都很差。捕块不应该是空的。您错误地关闭了资源。如果出现问题,你会怎么知道?通过连接,不要让方法负责获取它。使用PreparedStatement。这段代码应该扔掉,所以你可以重新开始。

0

这应该工作 - 您是每个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]); 
} 
+0

是我只是缺少“}”,所以一切都在“while”循环迭代?我仍然是初学者,谢谢! – user2221016 2013-04-09 21:05:32

+0

是的..只是''' – 2013-04-09 21:12:30

+0

谢谢,感谢帮助! – user2221016 2013-04-09 21:21:51

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]); 
     } 
相关问题