java - 房间预订检查
问题描述
在我的项目中,我创建了一个预订房间的系统。我的问题涉及在同一日期预订房间。这是关于预订的数据库。
id_book,登录,电子邮件,打字室,numroom,到达日期,离开日期。
这是检查房间是否在一段时间内可用的代码:
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.arrivaldate <= res2.departuredate)\n" +
"AND (res2.arrivaldate <= res1.departuredate)");
String check1 = ("SELECT count(*) FROM reservation WHERE arrivaldate");
ResultSet rs2 = stmt.executeQuery(check);
ResultSet rs3 = stmt.executeQuery(check1);
if( rs2 != rs3) {
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+"'");
}
问题是这样我一直在记录相同的房间和相同的日期,我该如何解决?
解决方案
我没有完全理解你的问题。我理解的部分是您显然不想在给定日期超量预订房间。
如果是这种情况,在显示可用房间时,您可以针对该日期触发 count(*) 查询。那时不需要任何更新操作。
在实际预订时,您需要通过适当的锁定或以不使用的方式编写查询来处理超额预订。房间数不低于 0。