问题描述
这是我第一次在这里发帖。
因此,我的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