Java вставить нулевую дату в MySQL с запросом на обновление - PullRequest
0 голосов
/ 08 июня 2018

Я работаю над приложением Java (GUI, JDBC, MySQL) и у меня есть проблема, которую я не могу решить.

Когда я вставляю данные в БД MySQL (есть этот тип данных String, INT, Дата), нет проблем, если некоторые поля пусты.Это пустое поле получает 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 Ответ

0 голосов
/ 08 июня 2018

когда вы делаете конкатенацию строк, например

rociste_datum='" + noviRocisteDatumDB + "'

, вы получите

rociste_datum='null'

вместо

rociste_datum=null

без кавычек на этот раз.db ожидает дату или ноль, а не строку 'null'

Следовательно, используйте заполнители перед созданием подготовленного оператора, а затем установите параметры.

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