Lỗi: Cannot insert the value NULL từ Java app vào SQL Server

Mình có đoạn code như sau:

 public void updateAccount(String username, String name, String address, String aboutMe, 
 String id) {
    String sql = "update Account set username = ?, \n"
            + "                [Full_Name] = ?,\n"
            + "                [Address] = ?,\n"
            + "                [about_me] = ?\n"
            + "                where id = ?";
    try {
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setString(1, username);
        ps.setString(2, name);
        ps.setString(3, address);
        ps.setString(4, aboutMe);
        ps.setString(5, id);
        ps.executeUpdate();

    } catch (Exception ex) {
        Logger.getLogger(AccountDao.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Nhưng khi thay đổi một số thông tin trên trang web nhưng nó không update được và có lỗi như thế này:

Severe: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL 
into column 'username', table 'FERA_ONL_LEARNING.dbo.Account'; column does not allow nulls. UPDATE fails. at 
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217) at 
com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1655) at 
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:440) at 
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:385) at 
com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505) at 
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnectio
n.java:2445) at 
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.j
ava:191) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:166) at 
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPrep
aredStatement.java:328) at dao.AccountDao.updateAccount(AccountDao.java:142) at 
controller.UserProfileController.doPost(UserProfileController.java:91)

Mình không hiểu tại sao giá trị là NULL và làm thế nào để có thể khắc phục nó ạ?

Cậu có thể mô tả thêm cậu đã gọi method updateAccount với tham số gì không?

2 Likes

Mình đã gọi method này trong một servlet trong hàm doPost như thế này ạ:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        AccountDao dao = new AccountDao();
        String id = request.getParameter("id");
        String username = request.getParameter("username");
        String name = request.getParameter("name");
        String address = request.getParameter("address");
        String aboutme = request.getParameter("aboutMe");

        Account account = dao.getAccountByID(id);
        dao.updateAccount(username, name, address, aboutme, id);
        request.getSession().setAttribute("account", account);
        request.getRequestDispatcher("UserProfile.jsp").forward(request, response);
    }

À không, ý tớ là cậu đã truyền giá trị gì vào method updateAccount ấy. Tớ muốn loại trừ TH cậu đã truyền NULL vào username argument.
Cậu có thể debug/in ra màn hình xem request ở method doPost cậu mới đưa có parameter username không được không?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?