java - 用Java控制数据库中的数据

标签 java mysql database

早上好,我正在创建的 Web 应用程序遇到问题。 Premtto 我对这种编程很陌生。 所以我的网络应用程序应该负责预订酒店房间。我的问题是当有人试图预订房间时要进行检查,这样你就不能在同一时期预订两个相同的房间。 只是写下代码后,不会执行检查,房间仍然被预订。我该怎么办才能按照你的办呢?非常感谢您的帮助。

try {

    Class.forName("com.mysql.cj.jdbc.Driver");
    //  out.println("driver loaded");
    Connection  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Hotel?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "root", "123456789");
    out.println("Connect");
    Statement  st = con.createStatement();
    Statement stmt = con.createStatement();
    out.println("connection successfull");

    String check = ("SELECT res1.id_prenotazione, res1.typeroom, res1.arrivaldate, res1.departuredate\n" +
        "FROM reservation res1, reservation res2\n" +
        "WHERE ( res1.typeroom = res2.typeroom ) \n" +
        "AND res1.id_prenotazione != res2.id_prenotazione\n" +
        "AND (res1.arrivaldate <= res2.departuredate)\n" +
        "AND (res2.arrivaldate <= res1.departuredate)");


    // ResultSet rs2  = stmt.executeQuery(check);
    out.println("<h1> Stringa chek eseguita </h1>");

    if (check) { // THIS DOESN't WORK OF COURSE
        int rs = st.executeUpdate("insert into reservation (login,email,typeroom,numroom,arrivaldate,departuredate)values ('" + login + "','" + email + "','" + typeroom + "','" + numroom + "','" + arrivaldate + "','" + departuredate + "')");
    }
    String getResultSet = ("SELECT count(*) FROM reservation WHERE arrivaldate ='" + arrivaldate + "'");
    String rs1 = ("SELECT count(*) FROM reservation WHERE arrivaldate");


    if (getResultSet != rs1) {
        int i = st.executeUpdate("DELETE FROM reservation WHERE id_prenotazione ='" + id_prenotazione + "'");

    } 

预订 ( id_prenotazione int(11) NOT NULL AUTO_INCRMENT,
登录 varchar(45) NOT NULL,
电子邮件 varchar(45) NOT NULL,
typeroom varchar(45) NOT NULL,
numroom int(11) NOT NULL,
到达日期日期时间不为空,
出发日期日期时间不为空,
主键(id_prenotazione)

用户 (
登录 varchar(45) NOT NULL,
名字 varchar(45) NOT NULL,
姓氏 varchar(45) NOT NULL,
密码 varchar(45) NOT NULL,
主键(登录)

最佳答案

您在检查 SELECT 中使用了与同一个表的联接,但尚未插入任何内容,因此查询毫无意义。您需要检查要存储的预订的值。

SELECT COUNT(*) 
FROM reservation 
WHERE numroom = $roomnumber -- I am guessing numroom is room number
  AND ($startdate >= arrivaldate AND $startdate <= departuredate)
   OR ($enddate >= arrivaldate AND $enddate <= departuredate)

将变量 ( $... ) 替换为您的值。您可能想研究如何相互验证日期,也许应该是 <, >而不是<=, >=在比较中。

在 Java 中,这将是

String query = "SELECT COUNT(*) FROM reservation WHERE numroom = '" + numroom + "' AND ('" + arrivaldate + "' >= arrivaldate AND '" + arrivaldate + "' <= departuredate) OR ('" + departuredate + "' >= arrivaldate AND '" + departuredate + "' <= departuredate)

关于java - 用Java控制数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52113755/

相关文章:

java - 如何在现有 SOAP Web 服务上添加 "Authentication"?

java - R.java 没有 R.id.map 的 map

MySQL,获取购买次数最多的三个客户 :

java - "A synchronized block in Java is synchronized on some object"是什么意思..?

php - 实现接口(interface)和自动加载类

php - 使用输入文件类型编辑图像

database - 如何使外部引用表或数据库可用于 Hadoop MapReduce 作业?

sql - ORA-30089 执行带有 DATE 类型字段的 CREATE TABLE 时

database - 如何预填充 sqlite 数据库?

java - Google App Engine 新的免费 SNI SSL 服务说明