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]。爲了防止此類錯誤再次發生,謹以此文章來提醒自己,同時也希望能幫到有需要的個位朋友們!

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