Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
预订时更新房间:酒店预订系统、Java、MySQL_Java_Mysql_Eclipse_Jdbc_Mysql Workbench - Fatal编程技术网

预订时更新房间:酒店预订系统、Java、MySQL

预订时更新房间:酒店预订系统、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

我正在用java和mysql做一个酒店预订系统。我的预订页面输入了客户、入住和退房的详细信息。到目前为止,插入客户详细信息、预订详细信息、付款详细信息还可以,但我无法更新特定客户预订的房间

以下是我的java代码:

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将更新它找到的第一条匹配记录。要跟踪哪个房间有人住或没人住,请使用唯一标识符。最好在实际编码之前规范化数据库。