# Fehler bei null-Datum in MySQL-DB



## Hannes23 (10. Feb 2010)

Hallo zusammen,

ich lese über ein Java-Programm Daten aus einer Datenbank aus und schreibe sie in eine andere. Soweit funktioniert das auch sehr gut. Leider bekomme ich einen Fehler, wenn ein Datumsfeld (datetime) der Quelltabelle den Wert NULL enthält.

Die Fehlermeldung:


```
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: 'null' for column 'GeloeschtDatum' at row 1
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3561)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2693)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2102)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2395)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2313)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2298)
```

Auftreten tut der Fehler beim Versuch den INSERT abzuschicken:


```
try {
   PreparedStatement psInsert = connection_dest.prepareStatement(sql);
   psInsert.close();
} catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}
```

Weiß jemand was ich da machen könnte? Laut der Datenbank akzeptiert das Feld NULL-Werte, also verstehe ich nicht, warum ich die dann nicht reinschreiben kann?

Vielen Dank und viele Grüße, Hannes


----------



## SlaterB (10. Feb 2010)

geniale Idee, deinen String sql NICHT zu posten,
ein Wert null mag erlaubt sein, 'null' dagegen wäre z.B. eine Zeichenkette mit 4 Buchstaben und weniger sinnvoll,

da du schon PreparedStatement benutzt:
wie wärs dann mit ?-Platzhalter und 
> psInsert.setDate(3,null);
oder ähnlich


----------



## Hannes23 (10. Feb 2010)

Hallo SlaterB,

vielen Dank für Deine schnelle Antwort! Tut mir leid, aber das SQL-Statement - und damit das wichtigste - hab ich leider völlig vergessen  Aber umso schöner, dass Du mein Problem auch ohne den String lösen konntest. Es lag genau daran! Ich habe automatisch jeden Spaltenwert in Anführungszeichen gesetzt, so natürlich auch die NULL-Werte. Ich habe jetzt eine Abrage eingebaut, die die Anführungszeichen nur bei Nicht-NULL-Werten setzt:


```
if (rsdata.getString(k)!= null){sql=sql+"'";}
```

...und schon klappt es 

Vielen Dank für Deine Hilfe und noch einen schönen Tag!!


----------

