Java 如何执行更新

Java 如何执行更新,java,mysql,jdbc,Java,Mysql,Jdbc,有人能帮我使用我的小Java/MySQL数据库工具吗? 部分代码如下所示,但当单击createCustomerButton时,DBMS告诉我,我的语法有点错误 protected static JTextField nachnameField = new JTextField(); protected static JTextField vornameField = new JTextField(); protected static JTextField postleitzahlField =

有人能帮我使用我的小Java/MySQL数据库工具吗? 部分代码如下所示,但当单击createCustomerButton时,DBMS告诉我,我的语法有点错误

protected static JTextField nachnameField = new JTextField();
protected static JTextField vornameField = new JTextField();
protected static JTextField postleitzahlField = new JTextField();
protected static JTextField strasseField = new JTextField();
protected static JTextField emailField = new JTextField();
protected static JTextField telefonField = new JTextField();
protected static JTextField zusatzinfoField = new JTextField();
static JButton createCustomerButton = new JButton("Kunde anlegen");

完全错误:

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'
[,322,4,461x19,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,
alignment' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
sun.reflect.NativeConstructorAccessorImpl.newInstance
(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.Util.getInstance(Util.java:383)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1062)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2840)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2334)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246)
at Main.passStatement(Main.java:66)
at Listener.mouseClicked(Listener.java:46)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6508)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
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:4501)
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)

非常感谢您的帮助

您正在对JTextFields调用
getText()
,只是忽略返回的字符串。而是将实际JTextField的toString结果而不是其文本传递到SQL语句中。不要那样做

因此,从字段中获取文本字符串,并将它们放入字符串变量中。然后使用这些变量来构建SQL语句。i、 e

String foo = fooTextField.getText();
// now use foo, not fooTextField to create your SQL statements.
i、 e

if (me.getSource() == createCustomerButton) {
    String nachname = nachnameField.getText(); // get text put into variable
    String vorname = vornameField.getText();

    // .... etc

    String statement = "INSERT INTO kunde (nachname, vorname, strasse, 
    postleitzahl, telefon, email, zusatzinfo) VALUES(" + nachname + "," // use variable here
    + vorname + "," ...... etc...

此外:

  • 学习并使用PreparedStatements,因为它们使用起来更安全
  • 不要将鼠标侦听器添加到JButtons,因为这会导致按钮行为不好(即,禁用的按钮仍然可以工作,按钮对空格键按下没有响应…)
  • 改用ActionListeners
  • 不要过度使用静态修改器。以这种方式使用它们意味着您的代码需要大大改进
  • 不要在你做的时候发布不好的片段,因为那只会让我们感到困惑

如果输入到SQL数据库的是字符串值,则需要在每个元素前后加上单引号,例如

tring statement = "INSERT INTO kunde (nachname, vorname, strasse, 
    postleitzahl, telefon, email, zusatzinfo) VALUES('" + nachname + "','" // use variable here
    + vorname + "')"; // ...... etc...

希望这是清楚的。

这段代码甚至不应该编译——您已经在另一个方法中嵌套了一个方法@Reimeus OP更新;)sry@HovercraftFullOfEels这些只是代码的一部分。这些是我最近在错误过程中更改的行。在此之前,它运行良好。不,在另一个方法中没有方法,sinco它不会编译,就像你说的;)刚刚尝试过,但没有任何区别-相同的错误:/@sehams:你必须对所有的JTextFields执行此操作,而不仅仅是我显示的一个。我知道我确实改变了他们所有人。我也摆脱了鼠标听器来处理我的按钮,现在使用一个预处理语句来进行查询。也感谢所有的建议。我对编码是一个新手,对面向对象编程是一个绝对的新手。遗憾的是,不是。可能是静态修饰符吗?类侦听器是否有其他方法获取从另一个类中的方法创建的JTextField字符串?就是这样!!谢谢!
if (me.getSource() == createCustomerButton) {
    String nachname = nachnameField.getText(); // get text put into variable
    String vorname = vornameField.getText();

    // .... etc

    String statement = "INSERT INTO kunde (nachname, vorname, strasse, 
    postleitzahl, telefon, email, zusatzinfo) VALUES(" + nachname + "," // use variable here
    + vorname + "," ...... etc...
tring statement = "INSERT INTO kunde (nachname, vorname, strasse, 
    postleitzahl, telefon, email, zusatzinfo) VALUES('" + nachname + "','" // use variable here
    + vorname + "')"; // ...... etc...