预订时更新房间:酒店预订系统、Java、MySQL
我正在用java和mysql做一个酒店预订系统。我的预订页面输入了客户、入住和退房的详细信息。到目前为止,插入客户详细信息、预订详细信息、付款详细信息还可以,但我无法更新特定客户预订的房间 以下是我的java代码:预订时更新房间:酒店预订系统、Java、MySQL,java,mysql,eclipse,jdbc,mysql-workbench,Java,Mysql,Eclipse,Jdbc,Mysql Workbench,我正在用java和mysql做一个酒店预订系统。我的预订页面输入了客户、入住和退房的详细信息。到目前为止,插入客户详细信息、预订详细信息、付款详细信息还可以,但我无法更新特定客户预订的房间 以下是我的java代码: String dml4 = "select * from room where roomType=? and statusAvailable='Yes'"; PreparedStatement ps4 = con.prepare
String dml4 = "select * from room where roomType=? and statusAvailable='Yes'";
PreparedStatement ps4 = con.prepareStatement(dml4);
ps4.setString(1, cbfirst.getSelectedItem().toString());
ResultSet rs = ps4.executeQuery();
if (!rs.next() ) {
JOptionPane.showMessageDialog(null, "No available rooms with roomType specified", "WARNING!", JOptionPane.ERROR_MESSAGE);
}
else{
//setting room in room table to be occupied
String dml5 = "update room set statusAvailable='No' where roomType=?";
PreparedStatement ps5 = con.prepareStatement(dml5);
ps5.setString(1, cbfirst.getSelectedItem().toString());
ps5.executeUpdate();
}
问题是,由于roomType='?'
,所有具有特定类型(例如,“single”)的房间都被设置为已占用
我怎样才能只订一间那种类型的房间
//inserting into guest table
String dml = "Insert into guest (fname,lname, dateOfBirth, gender, phone) values (?,?,?,?,?)";
PreparedStatement ps = con.prepareStatement(dml, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, fname.getText());
ps.setString(2, lname.getText());
ps.setString(3, ((JFormattedTextField)dob.getDateEditor().getUiComponent()).getText());
ps.setString(4, cbGender.getSelectedItem().toString());
ps.setString(5, formaPhone.getText());
ps.executeUpdate();
JOptionPane.showMessageDialog(null, "New Guest Added Successfully");
ResultSet keyOfGuest = ps.getGeneratedKeys();
keyOfGuest.next();
int keyGuest = keyOfGuest.getInt(1);
String keyGuest2 = String.valueOf(keyGuest);
//inserting into booking table
String dml2 = "insert into booking(guestID, checkIn, checkOut, totalPaymentDueAmt) values (?, ?, ?, ?)";
PreparedStatement ps2 = con.prepareStatement(dml2, Statement.RETURN_GENERATED_KEYS);
ps2.setString(1, keyGuest2);
ps2.setString(2, ((JFormattedTextField)checkin.getDateEditor().getUiComponent()).getText());
ps2.setString(3, ((JFormattedTextField)checkout.getDateEditor().getUiComponent()).getText());
ps2.setString(4, tfTotal.getText());
ps2.executeUpdate();
//inserting into payment table
ResultSet keyOfBook = ps2.getGeneratedKeys();
keyOfBook.next();
int keyBook = keyOfBook.getInt(1);
String keyBook2 = String.valueOf(keyBook);
String dml3 = "insert into payment(bookingID, guestID, paymentMethod, curPaymentAmt, additionalPayment) values (?,?,?,?,?)";
PreparedStatement ps3 = con.prepareStatement(dml3);
ps3.setString(1, keyBook2);
ps3.setString(2, keyGuest2);
ps3.setString(3, cbpay.getSelectedItem().toString());
ps3.setString(4, tfTotal.getText());
ps3.setString(5, null);
ps3.executeUpdate();
//String dml4 = "update room set statusAvailable='No' where roomType="+cbfirst.getSelectedItem().toString();
String dml4 = "select * from room where roomType=? and statusAvailable='Yes'";
PreparedStatement ps4 = con.prepareStatement(dml4);
ps4.setString(1, cbfirst.getSelectedItem().toString());
ResultSet rs = ps4.executeQuery();
if (!rs.next() ) {
JOptionPane.showMessageDialog(null, "No available rooms with roomType specified", "WARNING!", JOptionPane.ERROR_MESSAGE);
}
else{
//setting room in room table to be occupied
String dml5 = "update room set statusAvailable='No' where roomType=? limit 1";
PreparedStatement ps5 = con.prepareStatement(dml5);
ps5.setString(1, cbfirst.getSelectedItem().toString());
ps5.executeUpdate();
}
编辑:这是我的完整代码,JButton执行了它的操作 将
limit 1
添加到update
语句中。请注意,update
此处支持limit
,如果您想更具体,您应该为房间分配id,并使用该id更新状态:“update room set statusAvailable='No'where roomId='Numeric'”;,这种方式更有意义,因此如果您想预订特定房间,您可以这样做。是的,我的房间表中有roomID,但用户在预订房间时不选择roomID,他选择了roomType…我会像@Seth Difley说的那样尝试限制1,并让你们知道它是否有效。@Daimonz roomID应该由java的后端编程来处理,它非常简单。当他们选择房间类型时,他们希望您从DB中选择列表中的第一个可用房间类型,并使用roomID进行更新;您需要为每个房间使用一些唯一的标识符。。如果在更新中使用“限制”或“顶部”关键字。。SQL将更新它找到的第一条匹配记录。要跟踪哪个房间有人住或没人住,请使用唯一标识符。最好在实际编码之前规范化数据库。将limit 1
添加到update
语句中。请注意,update
此处支持limit
,如果您想更具体,您应该为房间分配id,并使用该id更新状态:“update room set statusAvailable='No'where roomId='Numeric'”;,这种方式更有意义,因此如果您想预订特定房间,您可以这样做。是的,我的房间表中有roomID,但用户在预订房间时不选择roomID,他选择了roomType…我会像@Seth Difley说的那样尝试限制1,并让你们知道它是否有效。@Daimonz roomID应该由java的后端编程来处理,它非常简单。当他们选择房间类型时,他们希望您从DB中选择列表中的第一个可用房间类型,并使用roomID进行更新;您需要为每个房间使用一些唯一的标识符。。如果在更新中使用“限制”或“顶部”关键字。。SQL将更新它找到的第一条匹配记录。要跟踪哪个房间有人住或没人住,请使用唯一标识符。最好在实际编码之前规范化数据库。