# Java Timestamp in Datenbank einfügen



## PeterPan123 (29. Nov 2012)

Hallo zusammen,

ich möchte ein Insert-Statement abgeben bei welchem eine ID, die aktuelle Zeit und noch ein anderer Wert genutzt wird. Jedoch bereitet mir die Zeit Probleme


```
java.sql.Timestamp tstamp = new java.sql.Timestamp(System.currentTimeMillis());
...
String query = "INSERT INTO datenbank.dbo.[" + textTeile[0] + "] (UID, Zeit, Vorgabe) Values ('"  + textTeile[0] +"'," + tstamp  +"," + textTeile[2] +")";   
		System.out.println("INSERT INTO datenbank.dbo.[" + textTeile[0] + "] (UID, Zeit, Vorgabe) Values ('" + textTeile[0] +"',"+ tstamp +"," + textTeile[2] +")");
		stmt.executeUpdate(query);
```

Hier das SQL-Statement nochmal einzeln: 
	
	
	
	





```
INSERT INTO datenbank.dbo.[010C27F412] (UID, Zeit, Vorgabe) Values ('010C27F412',2012-11-29 15:50:17.336,0.00);
```

Könnte es sein, dass es nicht klappt, weil die betreffende Spalte in der MS SQL-Datenbank vom Typ datetime ist? Wenn ja, weiß ich leider nicht wie ich die Java-Zeit in das richtige Format umformatiere.

Dieser Fehler wird ausgegeben:
[WR]Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Falsche Syntax in der Nähe von '15'.[/WR]


----------



## SlaterB (29. Nov 2012)

einfach danach suchen, 'MS SQL insert date',  vielleicht nicht ganz leicht die richtige DB zu erwischen,
ob dieser Link das richtige behandelt kann ich nicht sagen, 
.net - how to insert datetime into the SQL Database table? - Stack Overflow
aber zeigt zumindest die grundlegenden Erkenntnisse:
- alles außer Zahlen in Anführungszeichen
- evtl. noch Methoden wie hier convert() beteiligt, to_date() usw.

Bedienungsanleitung zur installierten DB wäre auch was nettes

---

edit:

```
String query = "INSERT INTO datenbank.dbo.[" + textTeile[0] + "] (UID, Zeit, Vorgabe) Values ('"  + textTeile[0] +"'," + tstamp  +"," + textTeile[2] +")";   
        System.out.println("INSERT INTO datenbank.dbo.[" + textTeile[0] + "] (UID, Zeit, Vorgabe) Values ('" + textTeile[0] +"',"+ tstamp +"," + textTeile[2] +")");
```
besser so schreiben:

```
String query = "INSERT INTO datenbank.dbo.[" + textTeile[0] + "] (UID, Zeit, Vorgabe) Values ('"  + textTeile[0] +"'," + tstamp  +"," + textTeile[2] +")";   
        System.out.println(query );
```


----------



## Bleiglanz (30. Nov 2012)

also wenn der sql-server in der gleichen zeitzone steht

```
String query = "INSERT INTO datenbank.dbo.[" + textTeile[0] + "] (UID, Zeit, Vorgabe) Values ('"  + textTeile[0] +"',CURRENT_TIMESTAMP," + textTeile[2] +")";   
        stmt.executeUpdate(query);
```


----------



## TKausL (30. Nov 2012)

Also ich würde ja (bin ich von PHP gewohnt) mit dem "richtigen" Timestamp arbeiten, also den Sekunden seit 01.01.1970.

```
long timestamp = System.currentMillis()/1000;
```
 müsste das sein


----------



## PeterPan123 (4. Dez 2012)

Danke euch allen!

Das Problem war einfach nur, dass ich noch zwei ' einfügen musste (vor und hinter das tstamp).


```
String query = "INSERT INTO datenbank.dbo.[" + textTeile[0] + "] (UID, Zeit, Vorgabe) Values ('"  + textTeile[0] +"','" + tstamp  +"'," + textTeile[2] +")";
```

Jetzt klappt es .


----------



## FArt (4. Dez 2012)

Queries sollest du dir nicht textuell zusammenbauen. Nutze PreparedStatements.


----------

