java - 我的jsp网站上的Mysql错误“列'USER_NAME'不能为空”
问题描述
我无法在我的 Jsp 项目中进行注册部分。我收到“列 'USER_NAME' 不能为空”错误。代码很多,很抱歉,我自己解决不了问题。不知道问题出在数据库还是代码中。
我会尝试:我重新安装了 Tomcat。我创建了一个新数据库,但又出现了同样的错误。
Mysql 数据库架构:
books_db
-------------> book
-------------> user_account
------> user_name, pk
------> password
------> gender
DButils.java
public static void register(Connection conn, UserAccount user) throws SQLException {
String sql = "Insert into User_account(user_name, password,gender) values (?,?,?)";
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1, user.getUserName());
pstm.setString(2, user.getPassword());
pstm.setString(3, user.getGender());
pstm.executeUpdate();
}
RegisterServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = MyUtils.getStoredConnection(request);
String userName = (String) request.getParameter("userName");
String password = (String) request.getParameter("password");
String gender = (String) request.getParameter("gender");
UserAccount userreg = new UserAccount(userName, password, gender);
String errorString = null;
if (errorString == null) {
try {
DBUtils.register(conn, userreg);
} catch (SQLException e) {
e.printStackTrace();
errorString = e.getMessage();
}
}
request.setAttribute("errorString", errorString);
request.setAttribute("userreg", userreg);
if (errorString != null) {
RequestDispatcher dispatcher = request.getServletContext()
.getRequestDispatcher("/WEB-INF/views/registerView.jsp");
dispatcher.forward(request, response);
}
else {
response.sendRedirect(request.getContextPath() + "/register");
}
注册视图.jsp
<form method="POST" action="${pageContext.request.contextPath}/register">
<table border="0">
<tr>
<td>User Name</td>
<td><input type="text" name="userName" value="${userreg.userName}" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="text" name="password" value="${userreg.password}" /></td>
</tr>
<tr>
<td>Gender</td>
<td><input type="text" name="gender" value="${userreg.gender}" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Submit" />
<a href="register">Cancel</a>
用户帐户.java
public static final String GENDER_MALE ="M";
public static final String GENDER_FEMALE = "F";
private String userName;
private String gender;
private String password;
public UserAccount(String userName, String password, String gender) {
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
.
.
.
解决方案
也许是因为您new UserAccount(userName, password, gender);
在构造函数中传递了参数,但是,从不set
在类中变量的值,这就是为什么 value 的原因userName
,null
如下所示:
public UserAccount(String userName, String password, String gender) {
this.userName = userName;//setting values in your class variable
this.password= password;
this.gender= gender;
}
推荐阅读
- php - 在 Wordpress 中使用数据库中的数据创建自定义页面
- r - 如何生成连接0和1的不同曲率的曲线?
- list - 在列表中分配变量
- linux - 如何在 bash 脚本中禁止打印警告消息?
- android - 按字母顺序排序后,房间数据库中的数据未更新
- javascript - Firestore:在聊天中列出消息的有效方法是什么?
- callback - 如何将数据从 python_callable 传递到 on_success_callback?
- python - 由于转义序列,python regex sub 无法正常工作
- amazon-web-services - Cloudformation 堆栈未从 EC2 启动模板中的用户数据接收信号
- ruby - Shopify 隐藏不可用的选项变体