0
<%
  Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/questionaire", "root", "root");
  Statement st=con.createStatement();
  ResultSet rs=st.executeQuery("Select * from question");
  List arrlist = new ArrayList();
  while(rs.next()){
  String xa =rs.getString("display");
  if(xa.equals("1")){
  arrlist.add(rs.getString("q"));
  }
}
Collections.shuffle(arrlist); %>
<%for(int i=0;i<5;i++){
    String str = (String) arrlist.get(i);%>
    <%=str%> //1
    <%st.executeUpdate("update question set display='0' where id=?");%> //comment 2
  <br>
<%}%>

这是我的代码。我有一些显示的问题,然后我将它们随机播放并随机选择 5 个问题。需要给出 5 个随机选择的问题 display='0' 可以在评论 2 中看到。我该怎么做.我需要将 str 具有的 id 传递给数据库。有人可以帮忙吗?

4

1 回答 1

0

1.)在选择问题时,您不仅应该“记住”问题文本,还应该“记住”id。为什么不创建一个新的“问题”类,既可以保留值,也可以保留更多信息(正确答案等)。

public class Question {

    private int id;
    private String questionText;
    private String answer;
    private boolean display=false;

    public Question(int id,String questionText,String answer) {
        this.id = id;
        this.questionText = questionText;
        this.answer= answer;
    }

    public int getId() {
        return id;
    }

    public String getQuestionText() {
        return questionText;
    }

    public String getAnswer() {
        return answer;
    }

public boolean getDisplay() {
    return display;
}

public void setDisplay(boolean display) {
    this.display = display;
}

}

为结果集中的每个条目创建一个新的问题对象并将其添加到您的问题列表中。

2.) 您不能将=?-syntax 与普通的 jdbc-Statement-object 一起使用。您必须为此使用 PreparedStatement,然后您可以通过setXXX()-methods 设置查询参数:

PreparedStatement stmt = conn.prepareStatement("update question set display='0' where id=?");
stmt.setInt(1, question.getId());
stmt.executeUpdate();

3.) 当多个用户访问您的应用程序时,我很确定您将在数据库中保存“显示状态”时遇到麻烦。而是使用问题对象的显示属性(见上文)。

于 2013-09-16T08:05:07.743 回答