2015-01-05 3 views
0

У меня возникла проблема, когда мой запрос возвращает результат, и я не могу проверить следующую строку.перейти к следующей строке mySQL JAVA

//here i assume that only "regular" is correct room type 
public boolean checkAvalibility(String roomType, String checkInDate, String checkOutDate) throws SQLException{ 
     database db = new database(); 
     db.connect(); 
     this.roomType = roomType; 
     if(roomType!="regular"){ 
      System.out.println("please select correct room type"); 
      return false; 
     } 

      myStmt = db.myConn.prepareStatement("select * from Rooms where " 
         + "RoomType = ?"); 
      myStmt.setString(1, roomType); 
      myRs = myStmt.executeQuery(); 
      boolean val = myRs.next(); 

      while(val){ 

       if(roomType.equals(myRs.getString("RoomType"))){ 
        System.out.println("correct room type"); 
        isType = true; 
       } 

       if(isType == true){ 
        int roomNumber = myRs.getInt("idRooms"); 
        if(checkDateAvailability(checkInDate, checkOutDate, roomNumber)==true){ 
         return true; 
        } 
        else{ 
         return false; 
        } 
       } 

      } 
       System.out.println(); 
       return false; 
     } 

этот код здесь

private boolean checkDateAvailability(String checkInDate,String checkOutDate, int roomNumber) throws SQLException{ 
     database db = new database(); 
     db.connect(); 
     myStmt = db.myConn.prepareStatement("select idRooms, CheckIn, CheckOut from Rooms where " 
        + "CheckIn=? AND RoomType=?"); 
     myStmt.setString(1, checkInDate); 
     myStmt.setString(2, roomType); 
     myRs = myStmt.executeQuery(); 
     boolean val = myRs.next(); 

     while(val){ 
//calcDateBeetween simply takes check-in date which is in database and current check-out date converts them to integer value and compares the difference  
     if(calcDateBetween(checkOutDate, myRs.getString("CheckIn")) <=0){ 
       System.out.println("You can book the room"); 
       return true; 
      } 

      else{ 
      System.out.println("Dates occupied"); 
      return false; 
      } 
     } 
    if(val==false){ 
       System.out.println("room is available for booking date is empty"); 
       return true; 
      } 
     else{ 
      System.out.println("i have no idea of what im doing"); 
     } 

    return false; 
    } 

качестве предварительного требования, скажем, я хочу иметь только две строки, и мне не нужны новые записи. Если я отправлю дату check-IN (!), Которая соответствует той, что находится в базе данных (в столбце «Check-in»), все работает нормально, и я распечатываю сообщение о том, что дата занята. Но если я отправлю стоимость регистрации ex. 23-01-2015 и выезд 03-02-2015 он не переходит к методу calcDateBetween(), вероятно, предполагая, что если запрос был пуст, таблица может быть обновлена, и у меня есть распечатка, которую датируют для бронирования. Что может быть решением в этой ситуации и почему она не сравнивает даты во втором случае? Спасибо! enter image description here

ответ

3

Здесь есть пара вопросов. Вместо

boolean val = myRs.next(); 

while(val){ 

написать

while(myRs.next()) { 

В противном случае, вы не каждый раз проверяя, есть ли еще строки; вы просто используете одно и то же истинное или ложное значение каждый раз.

Кроме того, в вашей петле while у вас есть return true; и return false; - и один из них будет запускаться каждый раз. Это сделает ваш метод законченным, и ваш цикл не будет работать снова. Вам, вероятно, не нужны эти return заявления.

+0

и должен ли я просто удалить 'if (val == false)' тогда? –

+0

Я попробую сейчас, спасибо –

+0

две вещи: 1) когда я удаляю обратные заявления программы сбой, так как методы должны что-то возвращать и 2) любую помощь со второй частью моего вопроса? Почему дата не отмечена значением «27-01-2015»? –

Смежные вопросы