【问题标题】:Control data in the database with Java用Java控制数据库中的数据
【发布时间】:2018-08-31 10:45:00
【问题描述】:

早上好,我正在创建的 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 + "'");

    } 

reservation ( id_prenotazione int(11) NOT NULL AUTO_INCREMENT,
login varchar(45) NOT NULL,
email varchar(45) NOT NULL,
typeroom varchar(45) NOT NULL,
numroom int(11) 非空,
arrivaldate 日期时间非空,
departuredate 日期时间非空,
主键 (id_prenotazione)

TABLE users (
login varchar(45) NOT NULL,
firstname varchar(45) NOT NULL,
lastname varchar(45) NOT NULL,
password varchar(45) 非空,
主键 (login)

【问题讨论】:

  • if(check) 不起作用...但checkString?你不想要boolean吗?
  • @achAmháin 我也尝试过 boolean : Boolean check = (.....) != NULL 然后 IF (check) {... } 但它是一样的
  • 您是否尝试使用检查变量执行查询??
  • 您已经在 out.println() 语句之前注释掉了执行查询,这就是为什么 check 可能会返回 false
  • @ProgrammingNewb 是的,我试过了

标签: java mysql database


【解决方案1】:

您在检查 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)

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

在 Java 中是

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

【讨论】:

  • 感谢您的回答! “你的价值观”是什么意思?
  • 我没有变量,因为我是在预订时插入的
  • @Jack23 当您在代码中执行INSERT 时,您就有了我所说的变量,请在检查是否存在预订时使用它们。我已经更新了问题
  • 所以你不建议使用布尔值而是字符串,我可以在 if 语句中输入什么?如果(查询...)
  • 您当然必须对数据库执行查询并查看结果,如果 count > 0 则您已经有预订
猜你喜欢
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多