# Datenumwandlungsfehler beim Umwandeln



## Cerveza (29. Mai 2009)

Hi, folgendes problem beim Insert:


```
org.h2.jdbc.JdbcSQLException: Datenumwandlungsfehler beim Umwandeln von 2009-05-29 10:47:28.456
Data conversion error converting 2009-05-29 10:47:28.456 [90021-73]
	at org.h2.message.Message.getSQLException(Message.java:103)
	at org.h2.value.Value.convertTo(Value.java:640)
	at org.h2.command.dml.Insert.update(Insert.java:87)
	at org.h2.command.CommandContainer.update(CommandContainer.java:69)
	at org.h2.command.Command.executeUpdate(Command.java:198)
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:137)
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:126)
```



```
statement="INSERT INTO STATISTICS VALUES ("+sid+","+uid+",'"+emailtyp+"',"+errors+",'"+timestamp+"','"+isEdi+"')";
conn.prepareStatement(statement).executeUpdate();
```

Es handelt sich um eine H2 Datenbank, die Tabelle STATISTICS ist wie folgt aufgebaut:

```
H2 DB                                           In meinem Java-Code
sid=integer(10)                                    int
uid=integer(10)                                    int
emailtyp=varchar(30)                               String
errors=integer(10)                                 int
timestamp=timestamp(23,10)                         java.sql.timestamp
isEdi=boolean(1)                                   boolean
```


----------



## SlaterB (29. Mai 2009)

funktioniert es denn, wenn du den zusammengebauten SQL-String direkt über ein anderes SQL-Tool eintippst?

gibts zu deiner Datenbank eine Anleitung, die erklärt, wie man Dati einfügt, Format usw.?

edit:
PreparedStatement und Datum als Parameter übergeben,
dann dürfte der Treiber schon die richtige Darstellung wählen


----------



## HoaX (29. Mai 2009)

Dein Datum ist halt falsch formatiert. Verwende preparedStatements, dann brauchst du dich um solche Dinge nicht kümmern und es kann kein SQL eingeschleust werden.


----------



## Cerveza (29. Mai 2009)

gleicher Fehler obwohl setTimestamp eigentlich ein java.sql.Timestamp in den richtigen timespamp für die db konvertieren sollte...

```
Date akt  = new Date();
Timestamp timestamp = new Timestamp(akt.getTime());
```


```
String sql="INSERT INTO STATISTICS VALUES ("+sid+","+uid+",'"+emailtyp+"',"+errors+",?,?)";
PreparedStatement preState = conn.prepareStatement(sql);
preState.setTimestamp(1, timestamp);
preState.setBoolean(2, isEdi);
preState.executeUpdate();
```

EDIT:
doch nicht ganz der gleicher Fehler folgendes ist dazu gekommen:


```
Caused by: java.lang.NumberFormatException: For input string: "2009-05-29 11:44:06.052"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	at java.lang.Integer.parseInt(Integer.java:456)
	at java.lang.Integer.valueOf(Integer.java:526)
	at java.lang.Integer.decode(Integer.java:918)
	at org.h2.util.MathUtils.decodeInt(MathUtils.java:89)
	at org.h2.value.Value.convertTo(Value.java:597)
```


----------



## Cerveza (29. Mai 2009)

hat sich erledigt klappt super mit den preparedStatement...hatte in der db noch nen feld eingefügt und vergessen den code anzupassen daher wollte der den ts an ner falschen stelle einfügen


----------

