Контроль данных в базе данных с помощью Java - PullRequest
0 голосов
/ 31 августа 2018

Доброе утро, у меня проблема с веб-приложением, которое я создаю. 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) NOT NULL,
arrivaldate datetime НЕ NULL,
departuredate datetime НЕ NULL,
ПЕРВИЧНЫЙ КЛЮЧ (id_prenotazione)

ТАБЛИЦА users (
login varchar (45) NOT NULL,
firstname varchar (45) NOT NULL,
lastname varchar (45) NOT NULL,
password varchar (45) NOT NULL,
ПЕРВИЧНЫЙ КЛЮЧ (login)

1 Ответ

0 голосов
/ 31 августа 2018

Вы используете соединение с той же таблицей в проверке 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...