首页 > 解决方案 > 我的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;
       }
.
.
.

标签: javamysqljspservlets

解决方案


也许是因为您new UserAccount(userName, password, gender);在构造函数中传递了参数,但是,从不set在类中变量的值,这就是为什么 value 的原因userNamenull如下所示:

public UserAccount(String userName, String password, String gender) {
        this.userName = userName;//setting values in your class variable
       this.password= password;
       this.gender= gender;

       }

推荐阅读