java - JDBC Mysql语法错误

标签 java mysql jdbc

我正在使用 mysql 并将 gui 中的选择字段附加到我的查询中。但是,我收到此查询的 mysql 异常:String query = "INSERT INTO racebikes "+ "VALUES(?,?,?)"; 对于测试措施,我打印了查询以确保字段正确,填充时读取为:INSERT INTO racebikes VALUES('BMC','Switzerland',10000.0)。这是怎么抛出语法异常的?

堆栈跟踪:

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 '?,?,?)' 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:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2828)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1842)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1764)
at JDBC_GUI$7.actionPerformed(JDBC_GUI.java:375)
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)

片段:

public void actionPerformed(ActionEvent e) {
    String query = "INSERT INTO racebikes " + "VALUES(?,?,?)";

        try{
            statement = connection.prepareStatement(query);
            statement.setString(1, (String)bikes_combo_box.getSelectedItem());
            statement.setString(2, bike_fields[0].getText());
            statement.setDouble(3, Double.parseDouble(bike_fields[1].getText()));

            statement.executeUpdate(query);

       } catch(SQLException e1) {
               e1.printStackTrace();
       } 

最佳答案

你能不能试试把这三个字段放在VALUES之前

String query = "INSERT INTO racebikes (field1, field2, field3)" + "VALUES(?,?,?)";

将它们替换为您的实际字段名称。

关于java - JDBC Mysql语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874807/

相关文章:

java - Else If Condition 语句中的变量

mysql - 插入后获取 UUID() 的值?

java - 无法打开登录请求的数据库 "NitgenAccessManager"。登录失败

java - 我该如何着手弄清楚这个复杂的递归算法?

java - 我如何在 NIO.2 中实现多播客户端?

mysql - 如何在命令行中使用执行mysqldiff实用程序?

php - mysql-如何使用循环选择id

Mysql存储过程获取插入后的总计数

java - 类型 5 JDBC 驱动程序

java - 为什么JVM不能保证垃圾回收