如何使用Java servlet将值插入到给定条件的表中?

时间:2014-12-19 12:49:11

标签: java mysql servlets

我正在办理酒店预订项目,我制作了两张桌子酒店和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 ...");

2 个答案:

答案 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/