严重:null <br> com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误

问题描述

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

因此,我的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,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,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,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,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是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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...