Как получить значение выбранного переключателя внутри сервлета и сохранить его в БД? - PullRequest
0 голосов
/ 17 апреля 2019

Я разрабатываю приложение для голосования, в котором можно проголосовать за конкретный вариант и отправить его. Теперь я хочу, чтобы пользователь выбрал опцию внутри сервлета и сохранил ее как голосование в базе данных. И этот счет должен всегда увеличиваться на 1 при получении нового голоса. Но это не дает мне желаемый результат. Каждый раз, когда я выбираю опцию и нажимаю «Отправить», 1 вставляется в соответствующий столбец базы данных, как голосование. Я назвал параметры в качестве имен столбцов в БД. Я хочу, чтобы каждый новый голос был дополнением к его предыдущему значению

Ниже приводится страница Voting.jsp: -

<div class="card" style="width: 60rem; margin-left: 45px;">
  <div class="card-body">
  Click on one of the following options to caste your vote. Then click submit.

  </div>
  </div>


<div class="card" style="width: 60rem; margin-left: 45px;">
  <div class="card-body">
  <form action="SuccessServlet" method="post">
    <label class="container">Team_1
  <input type="radio" name="radio" value="team1">
  <span class="checkmark"></span>
</label>
<label class="container">Team_2
  <input type="radio" name="radio" value="team2">
  <span class="checkmark"></span>
</label>
<label class="container">Team_3
  <input type="radio" name="radio" value="team3">
  <span class="checkmark"></span>
</label>
<label class="container">Team_4
  <input type="radio" name="radio" value="team4">
  <span class="checkmark"></span>
</label>
<button type="submit">Submit</button>
</form>
  </div>
</div>

и мой класс сервлетов следующий: -

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



        ud.setFirst_name(request.getParameter("f1"));



        String answer = request.getParameter("radio");

        if("team1".equals(answer)) {

            System.out.println("Hello");

            writeData1();

            }

    else if ("team2".equals(answer)) {

        writeData2();

    }

    else if ("team3".equals(answer)) {

        writeData3();
    }

    else if ("team4".equals(answer)) {

        writeData4();
    }

    else {
        response.sendRedirect("Success.jsp");
    }
    response.sendRedirect("UserPage.jsp");

}



    }


      public void writeData1() {

      try {
        Class.forName("com.mysql.cj.jdbc.Driver");


      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_db?autoReconnect=true&useSSL=FALSE", "root", "root");


      String query = "insert into Total_Votes(Team1) values(?)";

      PreparedStatement ps = con.prepareStatement(query);

      ps.setInt(1, 1);

      ps.executeUpdate();


      } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
        }





  }





public void writeData2() {

      try {
        Class.forName("com.mysql.cj.jdbc.Driver");


      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_db?autoReconnect=true&useSSL=FALSE", "root", "root");


      String query = "insert into Total_Votes(Team2) values(?)";

      PreparedStatement ps = con.prepareStatement(query);

      ps.setInt(1, 1);

      ps.executeUpdate();


      } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
        }





  }





public void writeData3() {

      try {
        Class.forName("com.mysql.cj.jdbc.Driver");


      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_db?autoReconnect=true&useSSL=FALSE", "root", "root");


      String query = "insert into Total_Votes(Team3) values(?)";

      PreparedStatement ps = con.prepareStatement(query);

      ps.setInt(1, 1);

      ps.executeUpdate();


      } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
        }





  }




public void writeData4() {

      try {
        Class.forName("com.mysql.cj.jdbc.Driver");


      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_db?autoReconnect=true&useSSL=FALSE", "root", "root");


      String query = "insert into Total_Votes(Team4) values(?)";

      PreparedStatement ps = con.prepareStatement(query);

      ps.setInt(1, 1);

      ps.executeUpdate();


      } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
        }





  }

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

предположим, что выбран переключатель team1, теперь вам нужно получить значение предыдущих голосов team1, используя запрос select, как показано ниже:

   try {
            Class.forName("com.mysql.cj.jdbc.Driver");
          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_db?autoReconnect=true&useSSL=FALSE", "root", "root");
    String sql="select votes from Total_Votes where team=?";
                     int votes=0;
                    PreparedStatement ps = con.prepareStatement(sql);
                   ps.setString(1,"team1");//passing team1 in query
                   rs = ps.executeQuery();
                    while(rs.next())
                   {
          votes=rs.getInt("yourcoulmnname");//getting value of coulmn where votes are stored for team1
                  }
                   }catch(Exception e)
                   {
                   System.out.println(e.getMessage());
                   }

Теперь используйте update запрос для обновления голосов, как показано ниже:

String sql1 = "UPDATE `Total_Votes` SET `yourcoulumnname`=? WHERE `team`=?";
             PreparedStatement ps = con.prepareStatement(sql1);
            int v=votes+1;//votes got from previous select query add by 1 
             ps.setInt(1,v);
             ps.setString(2,"team1");

             int i=0;
              i = ps.executeUpdate();

         if(i>0){
             System.out.println("updated");
           }

Надеюсь, это поможет вам!

1 голос
/ 17 апреля 2019

Ваш код всегда записывает 1 как общее количество голосов для указанной команды. Это нормально, если вы используете функцию SUM() в SQL, чтобы подвести итоги подсчета голосов для команды, когда вам нужно знать общее количество.

Есть два других способа справиться с этим:

  1. Только одна запись в базе данных на команду. Каждый раз, когда приходит голос, считайте текущее значение (или примите 0, если вы не можете найти текущее значение), увеличивайте его, а затем ОБНОВЛЕНИЕ запись с новым значением.

  2. Продолжайте вставлять запись за голос. Каждый раз, когда приходит голос, читайте текущее значение MAX() (или принимайте 0, если вы не можете найти текущее значение), увеличивайте его и INSERT другую запись с новым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...