2012-05-06 6 views
1

私は、Javaクイズアプリケーションを開発中です。申請書は、次の書式のうちの1つの20の質問で構成されます:データベースアクセスによるJSPクイズアプリケーション

ドイツ語xxxxの英語の単語は何ですか?

英語のxxxxというドイツ語の 単語は何ですか?

ワードテーブルとそのテーブルに単語を追加するページを含むデータベースを作成しました。 表には、次の列で構成されています、germanWord、性別englishWord

私の問題は、それぞれの質問時に、私はランダムに質問を形成するために、そのデータベースから単語を選択したいということですので、例えば:

英語のドイツ語は何ですかwordTable.getEnglishName

最後に、質問は多項選択問題ですので、4つの可能な回答の1つで、質問に対して選択された同じエントリから関連する回答を取るコマンドを挿入できますか?ここで

<input type="radio" name="q1Answer" value="A"/><label for="A">A) fixed answer</label><br/> 
<input type="radio" name="q1Answer" value="B"/><label for="B">B) fixed answer</label><br/> 
<input type="radio" name="q1Answer" value="C"/><label for="C">C) *get name from the database*</label><br/> 
<input type="radio" name="q1Answer" value="D"/><label for="D">D) fixed answer</label><br/><br/> 



package org.me.jsp.beans; 

import java.sql.*; 
import java.util.*; 

public class WordDataBean { 


    private Connection connection; 
    private PreparedStatement addWord, getWords, removeWord, getRandEnglishWord; 

    public WordDataBean() throws Exception { 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/university2", "root", 
        ""); 

      getWords = connection.prepareStatement("SELECT * FROM word"); 

      addWord = connection.prepareStatement("INSERT INTO university2.word (" 
        + "germanName, gender, englishName) " + "VALUES (?, ?, ?);"); 

      removeWord = connection.prepareStatement("DELETE FROM university2.student " 
        + "WHERE germanName='?';"); 
      getRandEnglishWord= connection.prepareStatement("SELECT englishName FROM word" 
        + "ORDER BY RAND() LIMIT 1"); 
     } catch (SQLException sqle) { 
      sqle.printStackTrace(); 
     } 

    } 

    public List<WordBean> getWordList() throws SQLException { 
     List<WordBean> wordList = new ArrayList<WordBean>(); 

     // obtain list of titles 
     ResultSet results = getWords.executeQuery(); 

     // get row data 
     while (results.next()) { 
      WordBean word = new WordBean(); 

      word.setGermanName(results.getString(1)); 
      word.setGender(results.getString(2)); 
      word.setEnglishName(results.getString(3)); 

      wordList.add(word); 
     } 

     return wordList; 
    } 

    public void addWord(WordBean word) throws SQLException { 
     addWord.setString(1, word.getGermanName()); 
     addWord.setString(2, word.getGender()); 
     addWord.setString(3, word.getEnglishName()); 
     addWord.executeUpdate(); 
    } 

    public void removeWord(WordBean word) throws SQLException{ 
     removeWord.setString(1,word.getGermanName()); 
     removeWord.executeUpdate(); 
    } 
    public void randomEnglishWord(WordBean word) throws SQLException{ 
     getRandEnglishWord.setString(1, word.getEnglishName()); 
     getRandEnglishWord.executeQuery(); 
    } 
    protected void finalize() { 
     try { 
      getWords.close(); 
      addWord.close(); 
      connection.close(); 
     } catch (SQLException sqlException) { 
      sqlException.printStackTrace(); 
     } 
    } 
} 

は、質問JSPページの1、q1.jspのサンプルです:

<%-- 
    Document : q1 
    Created on : 06-May-2012, 18:54:24 
    Author  : encore 
--%> 

<!--This JSP acts as the first question in a multiple choice quiz, with the user 
asked to submit their answer to the question--> 

<?xml version = "1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <title>Big Java Quiz, question 1</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
     <%if(request.getParameter("choice").equals("N")) 
      out.print("<meta http-equiv='refresh' content='0;url=options.jsp'/>"); 
      //Redirects user back to index if they did not want to take quiz%> 
     <form action="q2.jsp" method="POST"> 
      <b>Question 1.</b> What is the German noun for the English word ______?<br/><br/> 
      <input type="radio" name="q1Answer" value="A"/><label for="A">A) Exception generator</label><br/> 
      <input type="radio" name="q1Answer" value="B"/><label for="B">B) Exception manipulator</label><br/> 
      <input type="radio" name="q1Answer" value="C"/><label for="C">C) Exception handler</label><br/> 
      <input type="radio" name="q1Answer" value="D"/><label for="D">D) Exception monitor</label><br/><br/> 
      <input type="submit" value="Submit"/> 
     </form> 
    </body> 
</html> 
+0

私は困難を見つけていますそのコマンドをデータベースから値を取得するためにどのように表現するかを理解することができます。これまでの構築方法を示すために、質問のJSPページの例を投稿してもらいたいですか? –

+0

あなたの問題は基本的にデータベースから任意の順序で_words_(各質問ごとに1つ)の量を取得してから、それをユーザーに表示するのですか? –

+0

クイズの構造に論理があるので '1つのjspページ - > sumbit - >次の質問に行く(次のjspに送る)'私はデータベースから毎回1ワードしか取得する必要がないと言うでしょう –

答えて

1

は、リストにご質問をフェッチと仮定:

List<WordBean> wordList = getWordList(); 
    List<String> answersList = new ArrayList<String>(); 
    Random random = new Random(); 
    Random forAnswers = new Random(); 

    WordBean goodOne = wordList.get(random.nextInt(wordList.size())); 
    //take it out from the list 
    wordList.remove(goodOne); 
    //add it to the answers list 
    answersList.add(goodOne.getGermanName()); 
    WordBean fakeOne = wordList.get(random.nextInt(wordList.size())); 
    //take it out from the list 
    wordList.remove(fakeOne); 
    //add it to the answers list 
    answersList.add(fakeOne.getGermanName()); 
    WordBean fakeTwo = wordList.get(random.nextInt(wordList.size())); 
    //take it out from the list 
    wordList.remove(fakeTwo); 
    //add it to the answers list 
    answersList.add(fakeTwo.getGermanName()); 

    %>What is the english word for the german word <%=goodOne.getGermanName()%> 

    <% 
    char letter = 'A'; 
    for (String answer:answersList){ 
    %> 
    <input type="radio" name="q1Answer" value=""/><label for="<%=letter%>"><%=letter%>)<%=answerList.get(forAnswers.getNextInt(3))> /> 
    <% 
    //point to the next letter 
    letter++; 
    } 
関連する問題