2012-07-21 34 views
-1

因此,我正在制作一个简单的java项目,以在glassfish中使用JDBC来查看它是如何工作的。该计划仅向您显示调查列表以及您选择的调查问题列表。不过,我似乎无法显示我选择的调查问题列表。我一直得到空值。这是我所创建的方法:如何在Java JDBC中显示来自resultset的arrayList内容?

转换结果集为对象模型数据值

public JHAKSurvey findSurvey(long id) { 
    System.out.println("JDBC: FIND SURVEY"); 
    Connection connection = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    JHAKSurvey survey = null; 
    try { 
     connection = openConnection(); 
     String query = "SELECT * FROM APP.SURVEY WHERE ID=?"; 
     ps = connection.prepareStatement(query); 
     ps.setLong(1, id); 
     rs = ps.executeQuery(); 
     while (rs.next()) { 
      survey = createSurveyFromResultSet(rs);    
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     closeConnection(connection); 
    } 
    return survey; 
} 

私有方法来查询从问题表问题清单的调查ID

private void findQuestionsBySurvey(JHAKSurvey survey){ 
    System.out.println("JDBC: FIND QUESTIONS BY SURVEY"); 
    Connection connection = null; 
    PreparedStatement ps = null; 

    try { 
     connection = openConnection(); 
     String query = "SELECT * FROM APP.QUESTION WHERE SURVEYID=?"; 
     ps = connection.prepareStatement(query); 
     ps.setLong(1, survey.getId()); 
     ps.executeQuery(query); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     closeConnection(connection); 
    } 

} 

将查找结果集列表转换为问题对象并将其添加到调查对象的私有方法

private void createQuestionFromResultSet(ResultSet rs, JHAKSurvey survey){ 
    ArrayList<JHAKQuestion> qList = new ArrayList<JHAKQuestion>();  
    JHAKQuestion question = new JHAKQuestion(); 
    JHAKSurvey ss = new JHAKSurvey(); 
    //qList.add(survey.getQuestions()); 

    try { 
     while (rs.next()) { 
      //question.setDescription(qList.toString()); 
      question.setId(rs.getLong("ID")); 
      question.setDescription(rs.getString("DESCRIPTION")); 
      qList.add(question); 
      survey.setQuestions(qList); 
     }    
     System.out.println("createQuestionFromResultSet : JDBC : successful"); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     System.out.println("createQuestionFromResultSet : JDBC : fail"); 
     e.printStackTrace(); 
    } 
} 

私有方法的结果集转换为调查对象。

private JHAKSurvey createSurveyFromResultSet(ResultSet rs){ 
    JHAKSurvey survey = new JHAKSurvey(); 
    Boolean active = false; 
    String yes; 
    try { 
     yes = rs.getString("ACTIVE"); 
     survey.setId(rs.getLong("ID")); 
     survey.setTitle(rs.getString("TITLE")); 
     if (yes.equals(Character.toString('Y'))) { 
      survey.setActive(true); 
     } else { 
      survey.setActive(false); 
     } 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    return survey; 
} 

我错过了什么?我也似乎得到错误:

cannot convert from void to JHAKQuestion 

当我尝试的方法:createQuestionFromResultSet();

谢谢

回答

1

看看你的方法:

private void findQuestionsBySurvey(JHAKSurvey survey){ 

你想调查的问题,但该方法返回void。让它返回List<Question>。在方法的主体中,遍历结果集,将每一行转换为问题,将问题添加到List<Question>,并返回此列表。

或者,如果该方法的目标是提出问题,作为参数传递的调查,则该方法重命名为

private void addQuestionsToSurvey(JHAKSurvey survey) { 

和方法体里面,调用该方法createQuestionFromResultSet(这应该是命名为createQuestionsFromResultSetAndAddThemToSurvey),结果集和调查为参数:

private void findQuestionsBySurvey(JHAKSurvey survey){ 
    System.out.println("JDBC: FIND QUESTIONS BY SURVEY"); 
    Connection connection = null; 
    PreparedStatement ps = null; 

    try { 
     connection = openConnection(); 
     String query = "SELECT * FROM APP.QUESTION WHERE SURVEYID=?"; 
     ps = connection.prepareStatement(query); 
     ps.setLong(1, survey.getId()); 
     ResultSet rs = ps.executeQuery(query); 
     createQuestionFromResultSet(survey); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     closeConnection(connection); 
    } 

} 
+0

谢谢。工作很棒:) – user974873 2012-07-22 16:41:27