2016-12-02 87 views
0

我已经创建了一个对象保留和arrayList的保留,并且正在使用JDBC来处理保留数据库。我可以在表格中插入预留,但我必须在main中输入预留对象的所有属性的值。但是,数据库设置为自动生成预留ID。我的问题是如何做到这一点,以便当我插入到数据库时,而不是我输入的主要reservationID,当我插入到表中自动生成的ID输入。这是我第一次处理数据库,所以我对此有点新。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; 
    } 

保留的数组列表:

/** 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作为mysql数据库表中的RESERVATION_ID列(用于生成序列),并且您可以查看here关于如何在mysql数据库表中设置AUTO_INCREMENT

一旦你已经设置了AUTO_INCREMENT,你并不需要通过你的JDBC查询列RESERVATION_IDnewReservation.getReserveID(),如下图所示:

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

好吧表被设置为自动增量,但问题是在保留默认构造函数我设置reservationID = 0,它已经写完自动生成的值。 – Dan

+0

你的覆盖是什么意思?它是否在数据库中,价值被覆盖? – developer

+0

我已修复此问题,但感谢您的帮助 – Dan