[英]Servlet is not Updating DB with new data
我在使用UPDATE Servlet時遇到了一些小麻煩。
我試圖更新我的數據庫,但它沒有發生。 我是Java EE本章的新手。
** NB:我在使用UpdateServlet時遇到了麻煩,因為我不知道如何從JSP獲取修改后的數據,以便將其發送到DAO,然后更新DB。 其余的還可以
目的:當用戶單擊“更新”按鈕(下面的屏幕截圖)時...
... JSP將請求轉發到“更新用戶”頁面(如下),在此頁面中,他將能夠修改附加到電子郵件的名字和姓氏(這是主鍵)(下面的屏幕截圖)...
我的問題是:我如何實現UpdateUserServlet (請參見下面的代碼)代碼,該代碼從會話中獲取User對象,並使用新的名字和姓氏更新數據庫。
顯示用戶列表的JSP
<body>
<h1>Users List</h1>
<table cellpadding="5" border=1>
<tr valign="bottom">
<th>First Name</th>
<th>Last Name</th>
<th>Email Address</th>
</tr>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach var="user" items="${users}">
<tr valign="top">
<td><p>${user.firstName}</td>
<td><p>${user.lastName}</td>
<td><p>${user.emailAddress}</td>
<td><a href="displayUser?emailAddress=${user.emailAddress}">Update</a></td>
<td><a href="deleteUser?emailAddress=${user.emailAddress}">Delete</a></td>
</tr>
</c:forEach>
</table>
</body>
點擊“更新按鈕”后,下面的這個JSP將接管。
....
<body>
<h1>Update User</h1>
<form action="updateUser" method="post">
<table cellspacing="5" border="0">
<tr>
<td align="right">First name:</td>
<td><input type="text" name="firstName"
value="${user.firstName}">
</td>
</tr>
<tr>
<td align="right">Last name:</td>
<td><input type="text" name="lastName"
value="${user.lastName}">
</td>
</tr>
<tr>
<td align="right">Email address:</td>
<td>${user.emailAddress}</td>
</tr>
<tr>
<td></td>
<td><input type="button" value="Submit"></td>
</tr>
</table>
</form>
</body> ....
更新servlet。 獲得這一方面的幫助。
package user;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import business.User;
import data.UserDB;
public class UpdateUserServlet extends HttpServlet
{
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String emailAddress = request.getParameter("emailAddress");
User user = new User();
HttpSession session = request.getSession();
session.setAttribute("user", user);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setEmailAddress(emailAddress);
UserDB.update(user);
// TODO: add code that gets the User object from the session and updates the database
String url = "/displayUsers";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
}
DAO
package data;
import java.sql.*;
import java.util.ArrayList;
import business.User;
public class UserDB
{
public static int update(User user) {
ConnectionPool pool = ConnectionPool.getInstance();
Connection connection = pool.getConnection();
PreparedStatement ps = null;
String query = "UPDATE User SET " + "FirstName = ?, " + "LastName = ? "
+ "WHERE EmailAddress = ?";
try {
ps = connection.prepareStatement(query);
ps.setString(1, user.getFirstName());
ps.setString(2, user.getLastName());
ps.setString(3, user.getEmailAddress());
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return 0;
} finally {
DBUtil.closePreparedStatement(ps);
pool.freeConnection(connection);
}
}
}
嘗試將日志添加到update(User user)
方法。 看看是否有控制權來到這個地方。
我在第二個JSP中找到了根本原因,請參見下面的代碼。
<tr>
<td align="right">Email address:</td>
<td>${user.emailAddress}</td>
</tr>
Servlet的getParameter(“ emailAddress”)方法實際上獲得了一個空值,因為上面的代碼中沒有參數名稱。
因此,應該這樣做:
<tr>
<td align="right">Email address:</td>
<td><input type="text" name="emailaddress"
value="${user.emailaddress}">
</td>
</tr>
請注意,- 輸入type =“ text” -不是必需的,因為不必像名稱和名字一樣修改電子郵件地址。 因此,我應該找到一種在輸入文本框之外的其他位置顯示電子郵件地址的方法。 但現在有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.