【问题标题】:SEVERE: null<br> com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;严重:null<br> com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;
【发布时间】:2021-02-23 05:18:49
【问题描述】:

这是我第一次在这里发帖。

所以,我在我的 netbeans 项目中一遍又一遍地遇到这个错误,我不知道原因。 它说我的 SQL 语法是错误的,但是没有办法。因为我从同一个项目中的其他 java 代码中复制了它(基本上是一个模板),它工作得很好。我什至通过将代码复制到一个新的 java 文件中对其进行了测试,根据我的需要进行了更改,并且可以正常工作。

这是我尝试过的:手动重新键入此文件的所有代码,但仍然没有用。尝试将 SQL 语法从使用表“order”更改为表“produk”,然后它可以工作,但是当改回来时它再次给出相同的错误消息。可能是表有问题?所以我尝试在数据库中重新创建表,但仍然没有错误。我也尝试通过与项目中的其他类似代码进行比较来检查它。

代码如下:

package DAO;

import Koneksi.Database;
import Model.varOrder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class DAO_Order implements DAO_Interface<varOrder>{
Connection connection;

public DAO_Order(){
    connection = Database.KoneksiDB();
}

// Deklarasi SQL Statement
String INSERT = "INSERT INTO order(IDO, Nama, Jenis, Kuantitas) VALUES(?,?,?,?)";
String UPDATE = "UPDATE order set Nama=?, Jenis=?, Kuantitas=? WHERE IDO=?";
String DELETE = "DELETE FROM order WHERE IDO=?";
String SELECT = "SELECT * FROM order";
String CARI = "SELECT * FROM order WHERE IDO=?";

@Override
public void insert(varOrder Object) {
    PreparedStatement st = null;
    try{
        st = connection.prepareStatement(CARI);
        st.setString(1, Object.getvIDO());
        ResultSet rs = st.executeQuery();
        if(rs.next()){
            JOptionPane.showMessageDialog(null, "Data sudah pernah di simpan.");
        } else{
            st = null;
            st = connection.prepareStatement(INSERT);
            st.setString(1, Object.getvIDO());
            st.setString(2, Object.getvNama());
            st.setString(3, Object.getvJenis());
            st.setString(4, Object.getvKuantitas());
            st.executeUpdate();
            JOptionPane.showMessageDialog(null, "Data berhasil di simpan.");
        }
        st.close();
    }   catch (SQLException ex){
        Logger.getLogger(DAO_Order.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public void update(varOrder Object) {
    PreparedStatement st = null;
    try{
        st = connection.prepareStatement(UPDATE);
        st.setString(1, Object.getvNama());
        st.setString(2, Object.getvJenis());
        st.setString(3, Object.getvKuantitas());
        st.setString(4, Object.getvIDO());
        st.executeUpdate();
        JOptionPane.showMessageDialog(null, "Data berhasil di update.");
        st.close();
    } catch (SQLException ex) {
        Logger.getLogger(DAO_Order.class.getName()).log(Level.SEVERE, null, ex);
    } 
}

@Override
public void delete(String IDO) {
    PreparedStatement st = null;
    try{
        st = connection.prepareStatement(DELETE);
        st.setString(1, IDO);
        st.executeUpdate();
        JOptionPane.showMessageDialog(null, "Data berhasil di hapus.");
        st.close();
    } catch (SQLException ex) {
        Logger.getLogger(DAO_Order.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public List<varOrder> getAll() {
    List<varOrder> list = null;
    PreparedStatement st = null;
    try{
        st = null;
        list = new ArrayList<varOrder>();
        st = connection.prepareStatement(SELECT);
        ResultSet rs = st.executeQuery();
        while(rs.next()){
            varOrder objOrd = new varOrder();
            objOrd.setvIDO(rs.getString("IDO"));
            objOrd.setvNama(rs.getString("Nama"));
            objOrd.setvJenis(rs.getString("Jenis"));
            objOrd.setvKuantitas(rs.getString("Kuantitas"));
            list.add(objOrd);
        }
        st.close();
    } catch (SQLException ex) {
        Logger.getLogger(DAO_Order.class.getName()).log(Level.SEVERE, null, ex);
    }
    return list;
}

@Override
public List<varOrder> getCari(String key) {
    List<varOrder> list = null;
    PreparedStatement st = null;
    try{
        st = null;
        list = new ArrayList<varOrder>();
        st = connection.prepareStatement(SELECT);
        st.setString(1, "%"+key+"%");
        ResultSet rs = st.executeQuery();
        while(rs.next()){
            varOrder objOrd = new varOrder();
            objOrd.setvIDO(rs.getString("IDO"));
            objOrd.setvNama(rs.getString("Nama"));
            objOrd.setvJenis(rs.getString("Jenis"));
            objOrd.setvKuantitas(rs.getString("Kuantitas"));
            list.add(objOrd);
        }
        st.close();
    } catch (SQLException ex) {
        Logger.getLogger(DAO_Order.class.getName()).log(Level.SEVERE, null, ex);
    }
    return list;
}

}

这是错误消息:

run:
Nov 11, 2020 2:50:22 PM DAO.DAO_Order getAll
SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'order' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    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:1053)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322)
    at DAO.DAO_Order.getAll(DAO_Order.java:103)
    at Controller.Controller_Order.<init>(Controller_Order.java:32)
    at View.FrmOrder.<init>(FrmOrder.java:26)
    at View.MenuMinimarket.mnuOrderActionPerformed(MenuMinimarket.java:150)
    at View.MenuMinimarket.access$200(MenuMinimarket.java:13)
    at View.MenuMinimarket$3.actionPerformed(MenuMinimarket.java:94)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:842)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:886)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

抱歉语法和长篇文章!谢谢。

【问题讨论】:

  • 用反引号包围order`order`
  • 我刚刚尝试过,但它仍然给我同样的错误。但是在我更改了表名之后它现在可以工作了。从“订单”到“订单”。谢谢。
  • 哎呀对不起,别管我说的反引号,我认为它会起作用。我想它以前对我不起作用是因为我认为单引号和反引号是相同的

标签: java mysql model-view-controller syntax-error dao


【解决方案1】:

Order 是 SQL 中的关键字。如果你希望你的表被称为“订单”,你应该转义它:

INSERT INTO `order`(IDO, Nama, Jenis, Kuantitas) VALUES(?,?,?,?);
UPDATE `order` set Nama=?, Jenis=?, Kuantitas=? WHERE IDO=?;
DELETE FROM `order` WHERE IDO=?
SELECT * FROM `order`;
SELECT * FROM `order` WHERE IDO=?

另一种选择是调用您的表orders,而不是order

【讨论】:

  • 哦,原来如此!我现在感觉很笨哈哈哈。好的。我尝试使用 ' 但仍然给出相同的错误,不知道为什么。所以我改为更改表名并且它有效!非常感谢。
  • 您尝试使用单引号 (') 还是反引号 (`)?
  • 我明白了。这是我试过的单引号,我不知道反引号是不同的。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-10-26
  • 2017-02-10
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多