Próbuję zaktualizować tabelę z aplikacji Java, w której pewna kolumna może być ma wartość NULL. Próbowałem kilka różnych podejść, ale zawsze pojawia się następujący błąd:MySQL Nieprawidłowa wartość daty: null
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: 'null' for column 'scheidingsdatum' at row 1
Zrobiłem pewien, że tabela dozwolone wartości NULL w polu scheidingsdatum i można wstawić wartości NULL gdy bezpośrednio wkładając w MySQL
jest to struktura tabeli w phpMyAdmin:
tabele używać InnoDB
I wypróbowane następujące rozwiązania:
1: Wystarczy użyć zmienną pustą w parametrze
stmnt = conn.prepareStatement("UPDATE gezinnen SET "
+ "ouder1 = ?,"
+ "ouder2 = ?,"
+ "huwelijksdatum = ?,"
+ "scheidingsdatum = ? "
+ "WHERE gezinsNummer = ?");
stmnt.setString(1, ouder1);
stmnt.setString(2, ouder2);
stmnt.setString(3, huwelijksdatum);
stmnt.setString(4, scheidingsdatum);
stmnt.setString(5, nummer);
2: kodować pusta w zapytaniu (wewnątrz jeśli/inny blok)
stmnt = conn.prepareStatement("UPDATE gezinnen SET "
+ "ouder1 = ?,"
+ "ouder2 = ?,"
+ "huwelijksdatum = ?,"
+ "scheidingsdatum = NULL "
+ "WHERE gezinsNummer = ?");
stmnt.setString(1, ouder1);
stmnt.setString(2, ouder2);
stmnt.setString(3, huwelijksdatum);
stmnt.setString(4, nummer);
3: Zastosowanie setNull (4, java.sql.Types.DATE)
stmnt = conn.prepareStatement("UPDATE gezinnen SET "
+ "ouder1 = ?,"
+ "ouder2 = ?,"
+ "huwelijksdatum = ?,"
+ "scheidingsdatum = ? "
+ "WHERE gezinsNummer = ?");
stmnt.setString(1, ouder1);
stmnt.setString(2, ouder2);
stmnt.setString(3, huwelijksdatum);
stmnt.setNull(4, java.sql.Types.DATE);
stmnt.setString(5, nummer);
4: Wykorzystanie setNull (4, java.sql.Types.NULL)
stmnt = conn.prepareStatement("UPDATE gezinnen SET "
+ "ouder1 = ?,"
+ "ouder2 = ?,"
+ "huwelijksdatum = ?,"
+ "scheidingsdatum = ? "
+ "WHERE gezinsNummer = ?");
stmnt.setString(1, ouder1);
stmnt.setString(2, ouder2);
stmnt.setString(3, huwelijksdatum);
stmnt.setNull(4, java.sql.Types.NULL);
stmnt.setString(5, nummer);
po to mój plik database.properties i tworzenie gra:
bazy danych. właściwości
jdbc.drivers=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://IP:3306/TABLE_NAME
jdbc.username=USER
jdbc.password=PASSWORD
utworzenie połączenia
Class.forName(props.getProperty("jdbc.drivers")).newInstance();
this.conn = (Connection) DriverManager.getConnection(props.getProperty("jdbc.url"),props.getProperty("jdbc.username"),props.getProperty("jdbc.password"));
@ YassinHajaj NULL to specjalna wartość, SQL jest 3-wartościowym językiem logicznym. OP chce NULL, a nie niektóre zastąpienie go. Jeśli korzystasz z wymiany, musisz o tym pamiętać i odpowiednio zmodyfikować wszystkie swoje zapytania. –
@ YassinHajaj Każda data jest teoretycznie możliwa. –
@dognose To działa dla insertów, ale co z aktualizowaniem? Powinna być możliwa zmiana z rzeczywistej daty na późniejszą wartość null. –