我在做酒店预订项目,我制作了两张表Hotel和RoomType,表RoomType有不同类型的房间,现在我在酒店表中注册酒店每家酒店都有不同类型的房间,所以对于那家酒店,我试图使用 hotel_id 作为外键。但是我的代码无法插入酒店拥有的不同房间类型的数量,在下面的 Java 代码中,我首先注册了酒店,如果它成功地将酒店信息插入酒店,那么我将尝试为该酒店插入号码将不同数量类型的房间类型放入表 RoomType 中,但没有成功,我在浏览器上收到如下错误
您已成功注册 ...com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“where hotel_id='16'”附近使用的正确语法
**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)
)
Java 代码
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 ...");
最佳答案
您不能在 insert 中使用 where 子句陈述。如果您希望修改酒店 ID 为 16 的行,请考虑使用 update声明。
旁注 - 您的 SQL 容易受到 SQL code injection 的攻击
关于java - 如何使用 Java servlet 在给定条件下将值插入表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27566561/