Query funktioniert nicht in Java aber über SQLyog

toothpick192

Grünschnabel
Hallo ich habe ein kleines Problem und hoffe mir kann jemand helfen...

In meiner Anwendung bastel ich mir ein query welches dann an eine MySQL Datenbank geschickt wird. Allerdings wirft mir meine Anwendung immer eine SQLException.
Das ist ja ansich nicht schlimm (weil - passiert mir öfters;) ), aber in diesem fall sehe ich keinen Fehler und wenn ich genau dasselbe statement über SQLyog an die Datnebank schicke funktionierts auch einwandfrei.

Hier ein Beispiel query:
update tagesrestmenge set gutware='10000', aware='0', bware='0', cware='0', schlechtware='900', datum='3083020760342', artikel_artikelnr='h4er' where datum='3116111960342' and artikel_artikelnr='h4er';

Jemand eine Idee ?

Mit Dank im Voraus,
Christian
 
Hallo,
hier der gewünschte stacktrace.

Zur Erklärung - das ist jetzt die ganze Konsole. Zuerst nochmal das übergebene Query alst System.out.println().

Die 1064 ist der SQL Error-Code - und dann der eigentliche Stacktrace:



update tagesrestmenge set gutware='10000', aware='0', bware='0', cware='0', schlechtware='900', datum='2988412760342', artikel_artikelnr='h4er' where datum='3083020760342' and artikel_artikelnr='h4er';


1064



com.mysql.jdbc.exceptions.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 '2988412760342', artikel_artikelnr='h4er' where datum='3083020760342' and artikel' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2934)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1350)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1266)
at util.DBConnect.doUpdate(DBConnect.java:53)
at view.ZaehlungAendern.actionPerformed(ZaehlungAendern.java:126)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


Anmerkung: datum und artikel_artikelnr sind beides Primary Keys in meiner Datenbanktabelle. und das Query versucht ja beide zu ändern? Kann das evtl. ein Problem sein ?
 
Zuletzt bearbeitet:
Warum möchtest du eigentlich einen Primary Key ändern? Sowas sollte man eigentlich nicht tun. So kann es auch passieren, dass dieser nicht mehr eindeutig ist. So kann ich im moment aber keinen Fehler erkennen.

MFG

zEriX
 
Hallo,

ja Du hast natürlich Recht. Primary Keys sollte man eigentlich nicht ändern. Ich dachte mir, dass ich es dem Benutzer so einfach wie möglich machen wollte, so dass er z.B. nicht einen Datensatz erst löschen muss um dann einen neuen (den geänderten) neu zu erstellen.
Ich hatte auch überlegt dies das Programm erledigen zu lassen, nur bin ich davon ausgegangen, das dies nicht so performant wäre da man zwie Queries benötigt.

Mal abgesehen davon, dass ich es hoffentlich auch anders implementieren kan, interessiert mich jetzt aber irgendwie warum Java bei diesen Statements nen Fehler auswirft, aber SQLyog nicht und das Update fehlerfrei ausführt...

Noch jemand eine Idee ?

Christian
 
Nochmal zu den Primary Keys. Du solltest vielleicht das DB-Design nochmal überdenken. Zum Beispiel als Primary Key einfach einen Zähler verwenden, der hochgezählt wird. Dieser braucht dann nicht verändert zu werden.
Den Primary Key legt man eigentlich nur einmal an und verändert ihn nicht mehr. Es hat auch keinen sinn einen Datensatz zu löschen und neu anzulegen, nur weil man diesen ändern möchte und dummerweise der Primary-Key geändert werden muss.
Um dir spätere Probleme zu ersparen rate ich dir deine Datenbank-Design nochmal zu ändern.

MFG

zEriX
 
Änder doch einfach mal dein SQL-Query und lass artikel_artikelnr weg

update tagesrestmenge set gutware='10000', aware='0', bware='0', cware='0', schlechtware='900', datum='2988412760342', where datum='3083020760342' and artikel_artikelnr='h4er';

Denn was hat es für einen Sinn, eine artikelnummer upzudaten wenn sie nach dem Update genauso lautet wie davor?
 
Zurück