我正在开发 Java 应用程序(GUI、JDBC、MySQL),但遇到无法解决的问题。
当我向 MySQL DB 中插入数据时(有 String、INT、Date 等数据类型),如果某些字段为空,则没有问题。空字段将 Null 放入数据库中。但是,当我想更新某行时,必须填写所有日期字段,否则会出现错误:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: 'null' for column 'rociste_datum' at row 1
rociste_datum
是数据库中的第一个日期列
部分代码:
插入方法代码
public void insertPredmetDB(String prezime, String ime, int nasBroj, Date datumRocista) {
if (datumRocista == null || datumRocista.equals("")) {
datumRocistaDB = null;
} else {
String datumRocistaSt = new SimpleDateFormat("yyyy-MM-dd").format(datumRocista);
datumRocistaDB = java.sql.Date.valueOf(datumRocistaSt);
}
更新方法代码
public void updatePredmetDB(int idNovo, String novoPrezime, String novoIme, int noviNasBroj, Date noviRocisteDatum) {
if (noviRocisteDatum == null || noviRocisteDatum.equals("")) {
noviRocisteDatumDB = null;
} else {
String datumRocistaSt = new SimpleDateFormat("yyyy-MM-dd").format(noviRocisteDatum);
noviRocisteDatumDB = java.sql.Date.valueOf(datumRocistaSt);
}
String izmena = "UPDATE predmeti SET prezime='" + novoPrezime + "', ime='" + novoIme + "', nas_broj='" + noviNasBroj + "', rociste_datum='" + noviRocisteDatumDB + "'where id='" + idNovo + "'";
try {
PreparedStatement ps = con.prepareStatement(izmena);
ps.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
对于所有这些日期,都有 if else 语句,并且这个对象通过具有单例模式的 Controller 传递。我认为没有必要将该代码放在这里,因为没有错误,并且一切正常,除了这个日期。
我认为日期转换有问题。你能帮我什么忙吗?
最佳答案
当你像这样进行字符串连接时
rociste_datum='" + noviRocisteDatumDB + "'
然后你会得到
rociste_datum='null'
代替
rociste_datum=null
这次没有引号。 db 需要一个日期或 null 而不是字符串 'null'
因此在创建准备好的语句之前使用占位符,然后设置参数。
"UPDATE predmeti SET prezime=?, ime=?, nas_broj=?, rociste_datum=? where id=?";
关于java使用更新查询在mysql中插入空日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50761248/