java - 带有 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)
解决方案
问题是birthDate 为null,java.util.Date 到java.sql.Date 的转换不为null。所以如果birthDate为null,我必须添加一个if else语句
推荐阅读
- php - PHP循环递归函数
- mysql - 从重复数据中选择唯一数据的查询速度更快
- g++ - 找不到 -lann 和 -lcvm
- office365 - 更改通知在 Outlook for Mac OS 上不起作用
- python - 如何使用 python 向 mac 通知中心发送通知?
- android - recyclerview 视频中的 Exoplayer2 在 notifyitemchange 上暂停被调用
- java - 0x10000000 是十六进制吗?为什么这么长?ASCII 格式的值是多少?
- java - 如何修复这个随机行走程序代码?
- kubernetes - 如何使用 Kubeseal 密封一个 helm 模板化的秘密?
- java - 如何从 Java 中的函数打印返回值?