2012-07-21 35 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