我正在开发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语句,这些对象以单例模式通过控制器。我认为没有必要把代码放在这里,因为这里没有错误,除了这个日期之外,一切都正常。
我认为日期转换有问题。你能帮我什么忙吗?
1条答案
按热度按时间lstz6jyr1#
当你做字符串连接的时候
最后你会得到
而不是
这次没有报价。db需要日期或null而不是字符串“null”
因此,在创建prepared语句之前使用占位符,然后设置参数。