Java SQL Query Fehler

GermanGhettos

Lt. Commander
Registriert
Apr. 2011
Beiträge
1.102
Hi,

ich schreibe gerade ein Testprogramm mit einer lokalen Datenbank.
Ich bekomme aber einen Fehler bei dem folgenden SQL Query.
PHP:
ResultSet rs = doSQL(connection, "INSERT INTO dbo.Kundenuebersicht (ANREDE,TITEL,VORNAME,NACHNAME,STRAßE,PLZ,WOHNORT,GEBURTSDATUM) VALUES (\'"+anrede+"\',\'"+customerregistertitelfield.getText().toString()+"\',\'"+customerregisterfirstnamefield.getText().toString()+"\',\'"+customerregisterlastnamefield.getText().toString()+"\',\'"+customerregisterstreetfield.getText().toString()+"\',\'"+customerregisterplzfield.getText().toString()+"\',\'"+customerregisterplacefield.getText().toString()+"\',\'"+gesamt+"\'");

Wenn ich bei den Values simple Strings selbst mit '' eintippe, geht es.
Java haut nur folgendes raus.
PHP:
com.microsoft.sqlserver.jdbc.SQLServerException: Falsche Syntax in der Nähe von '13.10.1900'.
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:786)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:685)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:620)
	at GUI.doSQL(GUI.java:1516)
	at GUI.customerregisterok_ActionPerformed(GUI.java:1508)
	at GUI$14.actionPerformed(GUI.java:387)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


Jemand eine Idee? :D
 
Wie schon im Code steht: Falscher Syntax.

Ich denke nicht, dass der MSSQL "13.10.1900" als valides datum akzeptiert. -> 1900-10-13
 
Jo, falsche Syntax halt. Da baust du mit deinen Text/String-Methoden kein korrektes INSERT-Statement zusammen, mutmaßlich irgendwo ein Fehler beim Datum. Viel Spaß beim Knobeln ... ;)

(bzw. lass dir den Kram mal selber als String ausgeben, dann siehst du vermutlich den Fehler)
 
Datum Format klappt z.B. so für SQL Server (für heute): 20161201.
Mit 1/12/2016 könnte es auch klappen.
Mit dd.mm.yyyy gehts aber ganz sicher nicht.
 
Habs schon gefunden ^^
Habe einfach mal alles weggelöscht und nur mit der Anrede angefangen.
Hat funktioniert. Beim zweiten Part nicht mehr und dann ist es mir aufgefallen.

(\'"+anrede+"\',\'"+customerregistertitelfield.getText().toString()+"\',\'"+customerregisterfirstnamefield.getText().toString()+"\',\'"+customerregisterlastnamefield.getText().toString()+"\',\'"+customerregisterstreetfield.getText().toString()+"\',\'"+customerregisterplzfield.getText().toString()+"\',\'"+customerregisterplacefield.getText().toString()+"\',\'"+gesamt+"\')");

Die eine Klammer hat gefehlt. :evillol:
 
Wie beig1 schon sagt, guck dir unbedingt PreparedStatements an. Warum? Stichwort SQL Injections
 
Ich habe immerhin erstmal alle Sonderzeichen untersagt.
Man kann also mit den Textfeldern nicht rumspielen ^^
Das ist auch nur was kurzes zum testen, da stecke ich noch nicht so viel Arbeit rein.
Trotzdem danke.
 
Fehlt trotzdem der Überblick, wie du bei deinem Fehler schon gemerkt hast.

Code:
PreparedStatement prepStatement = connection.prepareStatement("INSERT INTO dbo.Kundenuebersicht (ANREDE,TITEL,VORNAME,NACHNAME,STRAßE,PLZ,WOHNORT,GEBURTSDATUM) VALUES(?,?,?,?,?,?,?,?);"
prepStatement.setString(1, anrede);
....
ResultSet rs = prepStatement.execute();

Nicht viel komplizierter, dafür um einiges übersichtlicher.
 
Zurück
Oben