我在网上找到了将查询数据存储到ArrayList然后将ArrayList转换为数组的建议。下面是我的代码,看起来我没有正确地做到这一点。 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;
}
答案 0 :(得分:3)
这应该更好。通过遍历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]);
}
顺便说一下:你的终结块是不安全的。如果rs.close()失败,则不会关闭连接。
答案 1 :(得分:0)
各方面的代码都很糟糕。 Catch块永远不应为空。您错误地关闭了资源。如果出现问题,你怎么知道?传递连接,不要让方法负责获取它。使用PreparedStatement。这个代码应该扔掉,这样你就可以重新开始了。
答案 2 :(得分: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]);
}
答案 3 :(得分: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]);
}