mysql把数据插入order表出错

今天遇到一个很坑的错误,在java中写好dao和dto后,写了一个插入订单表的测试方法,代码如下:


package cn.edu.lingnan.dto;
public class Order {
	private String OID;
	private String CustomerName;
	private String CustomerPhone;
	private String CustomerSex;
	private String EID;
	private String RoomID;
	private String BeginTime;
	private String EndTime;
	public Order(String _OID, String _CustomerName, String _CustomerPhone,String _CustomerSex, String _EID, String _RoomID, String _BeginTime, String _EndTime)
	{
		OID = _OID;
		CustomerName = _CustomerName;
		CustomerPhone = _CustomerPhone;
		CustomerSex= _CustomerSex;
		EID = _EID;
		RoomID = _RoomID;
		BeginTime = _BeginTime;
		EndTime = _EndTime;
	}
	@Override
	public String toString() {
		return "Order [OID=" + OID + ", CustomerName=" + CustomerName + ", CustomerPhone=" + CustomerPhone
				+ ", CustomerSex=" + CustomerSex + ", EID=" + EID + ", RoomID=" + RoomID + ", BeginTime=" + BeginTime
				+ ", EndTime=" + EndTime + ", toString()=" + super.toString() + "]";
	}
	public String getOID() {
		return OID;
	}
	public void setOID(String _OID) {
		OID = _OID;
	}
	public String getCustomerName() {
		return CustomerName;
	}
	public void setCustomerName(String _CustomerName) {
		CustomerName = _CustomerName;
	}
	public String getCustomerPhone() {
		return CustomerPhone;
	}
	public void setCustomerPhone(String _CustomerPhone) {
		CustomerPhone = _CustomerPhone;
	}
	public String getCustomerSex() {
		return CustomerSex;
	}
	public void setCustomerSex(String _CustomerSex) {
		CustomerSex = _CustomerSex;
	}
	public String getEID() {
		return EID;
	}
	public void setEID(String _EID) {
		EID = _EID;
	}
	public String getRoomID() {
		return RoomID;
	}
	public void setRoomID(String _RoomID) {
		RoomID = _RoomID;
	}
	public String getBeginTime() {
		return BeginTime;
	}
	public void setBeginTime(String _BeginTime) {
		BeginTime = _BeginTime;
	}
	public String getEndTime() {
		return EndTime;
	}
	public void setEndTime(String _EndTime) {
		EndTime = _EndTime;
	}
	
}


import java.util.Vector;

import cn.edu.lingnan.dto.Order;
import cn.edu.lingnan.util.DataAccess;

public class OrderDao {
	
	public boolean AddOrder(Order _o)
	{
		boolean flag = false;
		Connection conn = null;
		PreparedStatement prep = null;
		try {
			conn = DataAccess.getConnection();
			prep=conn.prepareStatement("insert into Order values(?,?,?,?,?,?,?,?)");
			prep.setString(1, _o.getOID());
			prep.setString(2, _o.getCustomerName());
			prep.setString(3, _o.getCustomerPhone());
			prep.setString(4, _o.getCustomerSex());
			prep.setString(5, _o.getEID());
			prep.setString(6, _o.getRoomID());
			prep.setString(7, _o.getBeginTime());
			prep.setString(8, _o.getEndTime());
			prep.executeUpdate();
			RoomDao rd = new RoomDao();
			boolean b = rd.ChangeState(_o.getRoomID(), "锟斤拷住");
			if(b)
				flag = true;
		}
		catch(SQLException e)
		{
			System.out.println(e.getMessage());
		}
		finally{
			DataAccess.closeConnection(conn, prep);
		}
		return flag;
	}
}

然后写了一个测试类:

package cn.edu.lingnan.test;

import cn.edu.lingnan.dao.OrderDao;
import cn.edu.lingnan.dto.Order;

public class AddOrderTest {
	public static void main(String[] args)
	{
		OrderDao od = new OrderDao();
		Order o = new Order("O001", "小明", "123456", "1", "E001", "R101", "2019-10-01", "2019-10-02");
		boolean result = od.AddOrder(o);
		System.out.println(result);
	}
}

但是呢,数据怎么也插不进去,报错如下:
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 ‘Order values(‘O001’,’?°???’,‘123456’,‘1’,‘E001’,‘R101’,‘2019-10-01’,‘2019-10-02’ at line 1
可以看到控制台的信息里面,sql语句已经出现了错误,我代码里的小明在控制台变成了????,一开始我以为是编码错误,就把eclipse和navicat的编码方式都换了,还是不行,最后经过百度才知道,order是mysql的关键字,所以在写sql语句的时候要在sql语句中的order加上反引号,==》`order`,这样就可以成功插入了。
类似的情况我在sqlserver也遇到过,不过在sqlserver的关键词是用[](中括号)来把数据括起来,例如在sqlserver中user写在sql语句中的时候,要把它写成[user]。为了防止此类错误再次发生,谨以此文章来提醒自己,同时也希望能帮到有需要的个位朋友们!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章