首页 > 解决方案 > 带有 JDBC 和 JSP 的 UPSERT MYSQL 命令

问题描述

我希望能够插入一行,如果看到主键已经存在,它只会更新该行而不是用户想要的。我可以编写 UPSERT 命令,但它给了我一个空指针错误。我不确定为什么。

这是我的代码:

  public PreparedStatement updateStudent(String studentId, String studentName, String sex, java.util.Date birthDate, double gpa) throws SQLException
    {
        // TODO: Use a PreparedStatement and return it at the end of the method
        java.sql.Date sd = new java.sql.Date(birthDate.getTime());

        String sql = "INSERT INTO student (sid, sname, sex, birthDate, gpa)
                      VALUES(?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE    \n" +
                      "sname=?, sex=?, birthDate=?, gpa=?";

        PreparedStatement pstmt = con.prepareStatement(sql);
        pstmt.setString(1, studentId);
        pstmt.setString(2, studentName);
        pstmt.setString(3, sex);
        pstmt.setDate(4, sd);
        pstmt.setDouble(5, gpa);
        pstmt.setString(6, studentName);
        pstmt.setString(7, sex);
        pstmt.setDate(8, sd);
        pstmt.setDouble(9, gpa);
        int row = pstmt.executeUpdate();
        return pstmt;
    }   

这是我收到的错误:

Updating student 00567454:
Exception in thread "main" java.lang.NullPointerException
    at EnrollJDBC.updateStudent(EnrollJDBC.java:349)
    at EnrollJDBC.main(EnrollJDBC.java:85)

标签: javamysqljspjdbc

解决方案


问题是birthDate 为null,java.util.Date 到java.sql.Date 的转换不为null。所以如果birthDate为null,我必须添加一个if else语句


推荐阅读