2016-11-21 115 views
0

我已经创建了一个基于图形用户界面的酒店管理系统在java netbeans中与Ms Access数据库连接。在数据库中,我有一个名为“RoomInfo”的表。在java中使用插入查询在ms数据库中插入数据Netbeans

我有两个名为Room和AddRoom的类。房间类包含房间的所有属性和添加新房间到数据库的添加方法。 AddRoom类具有前端表单,用户可以在JTextFields中输入房间类属性的值。

当我尝试在数据库中添加新房间时,我从AddRoom类的Room类中调用add_room方法。问题是,当我使用gettext方法从JTextFields中获取文本时,它不会从JTextFields读取文本。我在add_room函数中有一条if语句,如果任何字段留空,则显示消息“没有字段可以留空”。每当我尝试添加新房间时,都会弹出“没有任何字段可以留空”的消息。

需要帮助来识别问题。

房类

public class Room { 

    String roomno; 
    String reserved; 
    String category; 
    String airconditioned; 
    String bedtype; 
    String rent; 

    Connection con; 
    PreparedStatement ps; 
    ResultSet rs; 

    AddRoom adr = new AddRoom(); 

    public Room() 
    { 
     roomno = ""; 
     reserved = ""; 
     category = ""; 
     airconditioned = ""; 
     bedtype = ""; 
     rent = ""; 
     make_connection(); 
    } 

    public void make_connection() 
    { 
     try{ 
      String driver = "net.ucanaccess.jdbc.UcanaccessDriver"; 
      Class.forName(driver); 
      String login = "jdbc:ucanaccess://C:\\MsDatabase\\EmployeeDB.accdb"; 
      con = DriverManager.getConnection(login); 

     }catch(Exception ex){ System.out.println(ex);} 
    } 

    public void add_room() 
    { 
     try{ 
      if("".equals(adr.get_jtextfield1().getText())||"".equals(adr.get_jtextfield2().getText())|| 
       "".equals(adr.get_jtextfield3().getText())||"".equals(adr.get_jtextfield4().getText())|| 
       "".equals(adr.get_jtextfield5().getText())||"".equals(adr.get_jtextfield6().getText())) 
      { 
       JOptionPane.showMessageDialog(null, "None of the fields can be left empty"); 
      } 
      else 
      { 
       roomno = adr.get_jtextfield1().getText(); 
       reserved = adr.get_jtextfield2().getText(); 
       category = adr.get_jtextfield3().getText(); 
       airconditioned = adr.get_jtextfield4().getText(); 
       bedtype = adr.get_jtextfield5().getText(); 
       rent = adr.get_jtextfield6().getText(); 

       String sql = "INSERT INTO RoomInfo(RoomNumber,Reserved,RoomCategory,AirConditioned,BedType,RentPerDay)" 
        + "VALUES(?,?,?,?,?,?)"; 

       ps = con.prepareStatement(sql); 

       ps.setInt(1, new Integer(roomno)); 
       ps.setString(2, reserved); 
       ps.setString(3, category); 
       ps.setString(4, airconditioned); 
       ps.setString(5, bedtype); 
       ps.setInt(6, new Integer(rent)); 
       ps.executeUpdate(); 
       JOptionPane.showMessageDialog(null, "Room Added Successfully"); 
      } 

     }catch(Exception ex){ 
      JOptionPane.showMessageDialog(null, "Input in Room Number and " 
        + "Rent Per Day should be a number"); 
     } 
    } 

} 

AddRoom类

public class AddRoom extends javax.swing.JFrame { 

    public AddRoom() { 
     initComponents(); 
     make_connection(); 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     Room objr = new Room(); 
     objr.add_room(); 
    }           

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
     AdminHome admh = new AdminHome(); 
     admh.setVisible(true); 
     dispose(); 
    }           

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new AddRoom().setVisible(true); 
      } 
     }); 
    } 

    public JTextField get_jtextfield1() 
    { 
     return jTextField1; 
    } 

    public JTextField get_jtextfield2() 
    { 
     return jTextField2; 
    } 

    public JTextField get_jtextfield3() 
    { 
     return jTextField3; 
    } 

    public JTextField get_jtextfield4() 
    { 
     return jTextField4; 
    } 

    public JTextField get_jtextfield5() 
    { 
     return jTextField5; 
    } 
    public JTextField get_jtextfield6() 
    { 
     return jTextField6; 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JLabel jLabel4; 
    private javax.swing.JLabel jLabel5; 
    private javax.swing.JLabel jLabel6; 
    private javax.swing.JLabel jLabel7; 
    private javax.swing.JPanel jPanel1; 
    private javax.swing.JTextField jTextField1; 
    private javax.swing.JTextField jTextField2; 
    private javax.swing.JTextField jTextField3; 
    private javax.swing.JTextField jTextField4; 
    private javax.swing.JTextField jTextField5; 
    private javax.swing.JTextField jTextField6; 
    // End of variables declaration     
} 

回答

1

问题是这样的:

AddRoom adr = new AddRoom(); 

这将创建一个新AddRoom从主窗口分开。 最简单的解决方案是将其作为参数传递。所以删除该行并改变

public void add_room() 

public void add_room(AddRoom addr) 

然后在AddRoom

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    Room objr = new Room(); 
    objr.add_room(this); 
} 
+0

明白了!谢谢 ... – Yousaf