[英]How to get selected radio button's value inside of a servlet and store it inside DB?
我正在開發一種投票應用程序,可以在其中投票支持特定的選項並提交。 現在,我希望將用戶的選定選項放在servlet中,並將其作為投票存儲在數據庫中。 並且,當獲得新的投票時,該計數應始終增加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>
以下是我的Servlet類:
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());
}
}
您的代碼始終將1表示指定團隊的總投票值。 如果您需要知道總數時,在SQL中使用SUM()
函數對團隊的投票總數進行SUM()
那就很好。
還有其他兩種方法可以解決此問題:
每個團隊在數據庫中只有一條記錄。 每次投票時,讀取當前值(或者,如果找不到當前值,則假定為0),對其進行遞增,然后使用新值更新記錄。
每次插入都要插入記錄。 每次投票時,請讀取當前的MAX()
值(如果找不到當前值,則假定為0),對其進行遞增,然后使用新值插入另一條記錄。
假設選擇了team1
單選按鈕,現在您需要使用如下所示的select
查詢來獲取team1
的先前投票值:
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");
}
希望這對您有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.