2016-12-02 2 views
0

Я создал резервирование объектов и массив резервирования и использую JDBC для работы с базой данных о резервировании. Я могу вставить резервирование в таблицу, но я должен ввести значения всех атрибутов объекта резервирования в основном. Однако для базы данных установлено автоматическое создание идентификатора резервирования. Мой вопрос заключается в том, как я могу сделать это так, чтобы при вставке в базу данных вместо того, чтобы я ввел идентификатор резервирования в основном, что, когда я вставляю в таблицу, вместо этого вводится автоматически сгенерированный идентификатор. Это мой первый опыт работы с базами данных, поэтому я немного новичок в этом.JDBC, объекты, определенные пользователем, и администратор объектов, определенных пользователем

бронирование

/** The Reserve ID. */ 
    int ReserveID; 

    /** The Room ID. */ 
    int RoomID; 

    /** The Guest ID. */ 
    int GuestID; 

    /** The Stay duration. */ 
    int StayDuration; 

    /** The check. */ 
    boolean Check; 

    public reservation() 
    { 
     ReserveID = 0; 
     GuestID = 0; 
     RoomID = 0; 
     StayDuration = 0; 
     Check = false; 

    } 

    /** 
    * Instantiates a new reservation. 
    * 
    * @param reserveID the reserve ID 
    * @param roomID the room ID 
    * @param guestID the guest ID 
    * @param stayDuration the stay duration 
    * @param check the check 
    */ 
    public reservation(int reserveID, int guestID, int roomID, int stayDuration,  boolean check) { 
     ReserveID = reserveID; 
     GuestID = guestID; 
     RoomID = roomID; 
     StayDuration = stayDuration; 
     Check = check; 
    } 

ArrayList оговорок:

/** The res list. */ 
ArrayList<reservation> resList; 

/** 
* Instantiates a new reservation collection. 
*/ 
public reservationCollection() 
{ 
    resList = new ArrayList<reservation>(); 
} 

/** 
* Adds the reservation. 
* 
* @param r the r 
* @return true, if successful 
*/ 
public boolean addReservation(reservation r) throws SQLException { 
    resList.add(r); 
    reservationJDBC.insertReservation(r); 
    return true; 
} 

JDBC метод класса вставки:

public static boolean insertReservation(reservation newReservation) throws SQLException { 
    Connection dbConnection = null; 
    Statement statement = null; 

    String insRes = "INSERT INTO " + RESERVATIONTABLE 
      + " (RESERVATION_ID, GUEST_ID, ROOM_ID, DURATION, STATUS) VALUES (" 
      + newReservation.getReserveID() + ", " 
      + newReservation.getGuestID() + ", " 
      + newReservation.getRoomID() + ", " 
      + newReservation.getStayDuration() + ", " 
      + newReservation.getCheck() + ")";  


    try { 
     dbConnection = getDBConnection(); 
     statement = dbConnection.createStatement(); 
     statement.executeUpdate(insRes); 
     System.out.println("Record is inserted into DBUSER table!"); 
} catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } finally { 
     if (statement != null) { 
      statement.close(); 
     } 

     if (dbConnection != null) { 
      dbConnection.close(); 
     } 
    } 
    return false; 
} 

главная:

System.out.println("Hotel Management System - Test 1"); 

reservationCollection myCollection = new reservationCollection(); 

boolean on = true; 

while(on){ 
    reservation r = new reservation(45, 34, 56, 78, false); 

    if(myCollection.addReservation(r)){ 
     System.out.println("Success! The reservation has been inserted to database"); 
    } else { 
     System.out.println("Failed! There has been a problem with inserting reservation to the database"); 
    } 

    on = false; 
} 

ответ

0

Вы можете использовать AUTO_INCREMENT для этого столбца RESERVATION_ID (для генерации последовательности) в таблице базы данных mysql, и вы можете посмотреть here о том, как настроить AUTO_INCREMENT в таблице базы данных mysql.

После того, как вы настроили AUTO_INCREMENT, вам не нужно проходить столбец RESERVATION_ID и newReservation.getReserveID() в вашем запросе JDBC, как показано ниже:

String insRes = "INSERT INTO " + RESERVATIONTABLE 
      + " (GUEST_ID, ROOM_ID, DURATION, STATUS) VALUES (" 
      + newReservation.getGuestID() + ", " 
      + newReservation.getRoomID() + ", " 
      + newReservation.getStayDuration() + ", " 
      + newReservation.getCheck() + ")";  

И я настоятельно рекомендую не использовать вышеуказанные жесткие кодировки входных параметров непосредственно в строку sql (, которые подвержены атакам с использованием блока sql), скорее используйте prepareStatementsetter методы, как показано на рисунке here.

+0

нормально, что таблица настроена на автоматическое увеличение, но проблема заключается в конструкторе по умолчанию резервирования, который я устанавливаю для резервированияID = 0, и над написанием автоматически сгенерированного значения. – Dan

+0

Что вы понимаете, переписывая? Является ли это в базе данных, значение становится перезаписанным? – developer

+0

Я исправил проблему, но спасибо за помощь – Dan

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