2016-11-21 114 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