2013-10-08 108 views
0

這是對我最後一個問題的跟進,構建了我的動態調查問卷。多行,包裹在一個對象中

所以我有查詢,加入我需要動態創建頁面的所有表。

結構如下所示(廣東話上傳圖片,還不足以代表)

Question QuestionType  Possible answer 
------------------------------------------- 
How far  Single Choice  Too Far 
How far  Single Choice  Not too far 
How long Multiple Choice  Way long 
How long Multiple Choice  Huh? 
How long Multiple Choice  Dumb question 

查詢返回的行對於每個可能的答案,有時是2,其他時間4.沒有限制多少選擇一個問題可有。

在我的項目中,我有我的應用程序用來構建頁面的XML結構。

<rowset> 
    <row> 
     <questionText>This is a single choice question*</questionText> 
     <questionType>Single Choice</questionType> 
     <possibleAnswerSet> 
      <possibleAnswer>Yes</possibleAnswer> 
      <possibleAnswer>No</possibleAnswer> 
      <possibleAnswer>Maybe</possibleAnswer> 
     </possibleAnswerSet> 
    </row> 
    <row> 
     <questionText>This is a survey question</questionText> 
     <questionType>Survey</questionType> 
     <possibleAnswerSet> 
      <possibleAnswer></possibleAnswer> 
     </possibleAnswerSet> 
    </row> 
    <row> 
     <questionText>This is a mutiple choice question*</questionText> 
     <questionType>Multiple Choice</questionType> 
     <possibleAnswerSet> 
      <possibleAnswer>Apples</possibleAnswer> 
      <possibleAnswer>Bananas</possibleAnswer> 
      <possibleAnswer>Cranberries</possibleAnswer> 
      <possibleAnswer>Dragon fruit</possibleAnswer> 
     </possibleAnswerSet> 
    </row> 
</rowset> 

這件作品非常完美,數據以XML格式編碼,我的頁面生成。 所以我的問題是,從我的查詢返回的resultSet,我想要包裝在List或其他集合中的所有相關答案,以便我可以填充XML如上所述。

這是即時通訊目前如何設置,它返回每個POSSIBLE_ANSWER的對象,而不是每個問題

try 
     { 
      while (rset.next()) 
      { 
       ClientPojo clientObj = new ClientPojo(); 

       questionOptions = rset.getInt("QUESTION_OPTIONS"); 
       passPercentage = rset.getInt("CATEGORY_PASS_PERCENTAGE"); 
       questionText = rset.getString("QUESTION_TEXT"); 
       questionType = rset.getString("QUESTION_TYPE"); 
       categoryName = rset.getString("CATEGORY_NAME"); 
       possibleAnswerText = rset.getString("POSSIBLE_ANSWER_TEXT"); 
       possibleAnswerCorrect = rset.getString("POSSIBLE_ANSWER_CORRECT"); 
       questionId = rset.getInt("QUESTION_ID"); 

       clientObj.setAssessmentAreaId(assessmentAreaId); 
       clientObj.setCategoryName(categoryName); 
       clientObj.setPassPercentage(passPercentage); 
       clientObj.setPossibleAnswerCorrect(possibleAnswerCorrect); 
       clientObj.setPossibleAnswerText(possibleAnswerText); 
       clientObj.setQuestionOptions(questionOptions); 
       clientObj.setQuestionText(questionText); 
       clientObj.setQuestionType(questionType); 
       clientObj.setQuestionId(questionId); 

       questionsList.add(clientObj); 
      } 
     } 

是我想要使用可能與查詢IM,或者我需要改變這種狀況。

編輯: 這裏是我的查詢:

SELECT "CAQ_SCHEMA"."QUESTION".*, "CAQ_SCHEMA"."CATEGORY".*, "CAQ_SCHEMA"."CATEGORY_QUESTION_LINK".*, "CAQ_SCHEMA"."POSSIBLE_ANSWER".* , "CAQ_SCHEMA"."ASSESSMENT_AREA".* 
FROM "CAQ_SCHEMA"."QUESTION" 
    JOIN "CAQ_SCHEMA"."CATEGORY_QUESTION_LINK" 
     ON "CAQ_SCHEMA"."CATEGORY_QUESTION_LINK".QUESTION_ID = "CAQ_SCHEMA"."QUESTION".QUESTION_ID 
    JOIN "CAQ_SCHEMA"."POSSIBLE_ANSWER" 
     ON "CAQ_SCHEMA"."POSSIBLE_ANSWER".QUESTION_ID = "CAQ_SCHEMA"."QUESTION".QUESTION_ID 
    JOIN "CAQ_SCHEMA"."CATEGORY" 
     ON "CAQ_SCHEMA"."CATEGORY".CATEGORY_ID = "CAQ_SCHEMA"."CATEGORY_QUESTION_LINK".CATEGORY_ID 
    JOIN "CAQ_SCHEMA"."ASSESSMENT_AREA" 
     ON "CAQ_SCHEMA"."ASSESSMENT_AREA".ASSESSMENT_AREA_ID = "CAQ_SCHEMA"."CATEGORY".ASSESSMENT_AREA_ID 
    WHERE "CAQ_SCHEMA"."ASSESSMENT_AREA".ASSESSMENT_AREA_ID = '1'; 

謝謝你們。

+0

很難回答,如果您的查詢是適當的,而不知道您的查詢... –

+0

公平的,現在這個查詢是混亂的,只是抓住所有領域,稍後將改進它只返回我需要的。編輯我的問題,添加查詢 – TheGoose

回答

0

也許我錯了,但如何使用地圖questionId->問題,然後做這樣的事情?

Map<Integer, ClientPojo> questions = new HashMap<Integer, ClientPojo>(); 

while (rset.next()) 
{ 
    questionId = rset.getInt("QUESTION_ID"); 

    ClientPojo clientObj = questions.get(questionId); 
    if(clientObj == null) 
    { 
    ClientPojo clientObj = new ClientPojo(); 

    questionOptions = rset.getInt("QUESTION_OPTIONS"); 
    passPercentage = rset.getInt("CATEGORY_PASS_PERCENTAGE"); 
    questionText = rset.getString("QUESTION_TEXT"); 
    questionType = rset.getString("QUESTION_TYPE"); 
    categoryName = rset.getString("CATEGORY_NAME"); 

    clientObj.setAssessmentAreaId(assessmentAreaId); 
    clientObj.setCategoryName(categoryName); 
    clientObj.setPassPercentage(passPercentage); 
    clientObj.setQuestionOptions(questionOptions); 
    clientObj.setQuestionText(questionText); 
    clientObj.setQuestionType(questionType); 
    clientObj.setQuestionId(questionId); 

    questionsList.add(clientObj); 
    } 

    possibleAnswerText = rset.getString("POSSIBLE_ANSWER_TEXT"); 
    possibleAnswerCorrect = rset.getString("POSSIBLE_ANSWER_CORRECT"); 

    //I'll leave the Answert object for you 
    clientObj.addPossibleAnswer(new Answer(possibleAnswerText, possibleAnswerCorrect)); 
} 

如果有多個答案,聯接自然會產生多個結果集。因此,您可以使用2個查詢(一個用於問題,另一個用於可能的答案),或者只要您已經創建問題並僅添加其他答案,就忽略問題數據。

+0

感謝托馬斯您的建議,我設法使用兩個查詢來得到它的工作。起初我不想走這條路,但它最終成爲最快的解決方案。 – TheGoose