java在mysql中使用update查询插入空日期

xv8emn3q  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(784)

我正在开发java应用程序(gui、jdbc、mysql),我有一个无法解决的问题。
当我将数据插入mysql db(有这个数据类型string,int,date)时,如果一些字段是空的,就没有问题了。空字段在db中为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语句,这些对象以单例模式通过控制器。我认为没有必要把代码放在这里,因为这里没有错误,除了这个日期之外,一切都正常。
我认为日期转换有问题。你能帮我什么忙吗?
lstz6jyr

lstz6jyr1#

当你做字符串连接的时候

rociste_datum='" + noviRocisteDatumDB + "'

最后你会得到

rociste_datum='null'

而不是

rociste_datum=null

这次没有报价。db需要日期或null而不是字符串“null”
因此,在创建prepared语句之前使用占位符,然后设置参数。

"UPDATE predmeti SET prezime=?, ime=?, nas_broj=?, rociste_datum=? where id=?";

相关问题