我正在办理酒店预订项目,我制作了两张桌子酒店和RoomType, Table RoomType有不同类型的房间,现在我正在酒店桌面注册酒店并且每家酒店都有不同类型的房间,所以对于那家酒店,我试图将其所拥有的不同类型的房间数量插入到单独的餐厅,使用 hotel_id 作为外键。但我的代码不适用于插入酒店拥有的不同房型的数量,在以下java代码中我首先注册酒店,如果成功将酒店信息插入酒店,那么该酒店我试图插入号码不同数量类型的房间类型进入表RoomType,但它不成功,我在浏览器上收到错误如下:
您已成功注册... com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在'附近使用正确的语法,其中hotel_id =' 16''第1行
**Hotel Table**
CREATE TABLE hotel (
hotel_id varchar(100) NOT NULL,
name varchar(100) NOT NULL,
city varchar(100) NOT NULL,
address text NOT NULL,
Locality tinytext NOT NULL,
PRIMARY KEY (hotel_id)
)
**RoomType Table**
CREATE TABLE roomtype (
hotel_id varchar(100) NOT NULL,
roomtype1 varchar(100) UNIQUE,
roomtype2 varchar(100) UNIQUE,
roomtype3 varchar(100) UNIQUE,
roomtype4 varchar(100) UNIQUE,
FOREIGN KEY (hotel_id) REFERENCES hotel (hotel_id)
)
Javacode
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/hotelres","root","1234");
PreparedStatement ps=con.prepareStatement("insert into hotel(hotel_id,name,city,address,Locality ) values('"+hotel_id+"','"+name+"','"+city+"','"+address+"','"+locality+"')");
//PreparedStatement ps=con.prepareStatement("insert into registeruser(Name, Password) values('"+n+"','"+p+"')");
int i=ps.executeUpdate();
if(i>0){
out.print("You are successfully registered ...");
ps=con.prepareStatement("insert into roomtype(hotel_id,roomtype1,roomtype2,roomtype3,roomtype4) values('"+hotel_id+"','"+room_type1+"','"+room_type2+"','"+room_type3+"','"+room_type4+"')where hotel_id="+"'"+hotel_id+"'");
int j=ps.executeUpdate();
if(j>0)
out.print("ou are successfully registered ...\n");
else
out.print("You are not able to registere ...\n");
}
else
out.print("You are not able to registere ...");
答案 0 :(得分:3)
您无法在insert语句中使用where子句。如果您希望修改酒店ID为16的行,请考虑使用update语句。
附注 - 您的SQL容易受到SQL code injection
的攻击答案 1 :(得分:0)
你的问题符合:
ps=con.prepareStatement("insert into roomtype(hotel_id,roomtype1,roomtype2,roomtype3,roomtype4) values('"+hotel_id+"','"+room_type1+"','"+room_type2+"','"+room_type3+"','"+room_type4+"')where hotel_id="+"'"+hotel_id+"'");
您不能在insert子句中使用where。只需将其作为值中的参数传递即可。
"insert into roomtype(hotel_id,roomtype1,roomtype2,roomtype3,roomtype4) values('"+hotel_id+"','"+room_type1+"','"+room_type2+"','"+room_type3+"','"+room_type4+"')"
BTW:通过连接传递变量是不好的做法,可以提供给SQL注入。请使用像这样的参数化查询:http://www.mkyong.com/jdbc/jdbc-preparestatement-example-insert-a-record/