java - 如何使用 Java servlet 在给定条件下将值插入表中?

标签 java mysql servlets

我在做酒店预订项目,我制作了两张表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/

相关文章:

java - 如何使用 docker 镜像从另一个微服务调用一个微服务

mysql - 在 OrderBy Doctrine Querybuilder 中使用 IS NULL 和 COALESCE

java - 当我运行 Atmosphere 样本的 Atmosphere 聊天多房间时,@Message注释不起作用

java - 如何在JSP、Servlet应用程序中将电子邮件内容转换为html格式?

java - 需要一对多关系设计的帮助

java - 我在网络应用程序中所做的事情是否可以轻易被黑客攻击或破坏?

java - 从带有数字的文本文件中读取字母

php - 我可以单独从服务器端 PHP 填充 "Google Charts"吗?

mysql - 合并来自 2 个 Rails 应用程序的数据?

java - 如何避免 servlet 响应新的 html 页面?