MySQL Syntaxfehler im Statement

LadyMilka

Aktives Mitglied
Hallo,

ich versuche eine csv-Datei auszulesen und in eine MySQL-Datenbank zu schreiben., dazu verwende ich den JDBC-Treiber.

Die csv-Datei sieht etwa so aus:
Code:
2011-07-31 08:00:00;0.00;
2011-07-31 09:00:00;12.50;
2011-07-31 10:00:00;37.50;

Der Zeitpunkt wird bei mir ein einem joda-DateTime-Objekt gehalten. In der MySQL-Tabelle ist der Datentype der Spalte ebenfalls DATETIME.

Wenn ich nun die Daten mittels
Java:
String sql = "INSERT INTO testdata(key, value) VALUES('"+tmpDate.toString(dtf) +"'," + tmpValue +");";
query.executeUpdate(sql);
einfügen möchte, bekomme ich immer folgenden Fehler
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, value) VALUES('2011-07-31 01:00:00',0.00)' at line 1

Geb ich das Statement aber über phpMyAdmin ein, speichert er mir Daten ohne Probleme. Eine falsche Formatierung des DateTime-Objektes ist also nicht gegeben.


Ich habe jetzt schon gesucht, aber konnte das Problem nicht beheben. Vielleicht hat ja jemand von euch eine Idee.
 
wer weiß schon was genau alles bemeckert wird je nach Quelle, was intern doch noch passiert,

an Leerzeichen zwischen Tabellenname und Klammer oder Semikolon am Ende weg liegt es nicht?

danach gehe methodisch vor:
neue Test-Tabelle, nur eine Spalte mit Zahlwert,
funktioniert
String sql = "INSERT INTO dummy VALUES(5)";
?

dann
String sql = "INSERT INTO dummy(intSpalte) VALUES(5)";
?
danach mehrere einfache Spalten, schließlich auch wieder Date,
scheitert dort auch Date?
erstmal nur als fertiges SQL im String, noch gar nicht mit Java-Variablen, was irgendwann dann aber auch wieder zu testen

PreparedStatement mit ? und setDate() gibt es schließlich auch noch, mindestens zum Ausprobieren
 
Danke SlaterB für den Tipp, auf die Idee mich schrittweise ranzutasten bin ich mal wieder nicht gekommen. 😳

Das Problem lag nicht bei der Formatierung sondern bei der Spaltenbeschriftung. Eine der Spalten hieß erst "key", und nun hab ich sie umbenannt in "datum" und es läuft problemlos.

Ohne das Rantasten wäre ich nie drauf gekommen.


Edit: key ist ein Schlüsselwort im SQL-Standard
 
Zuletzt bearbeitet:
hmm, hatte ich bei value zu VALUES auch mal kurz gedacht aber nicht weiter verfolgt,

zeigt mal wieder dass die Fehlermeldung eigentlich immer korrekt ist: beginnt genau dort inklusive dem Teil des SQLs, bei dem die Verarbeitung stockt, genau bei key..
 

Zurück
Oben