2016-07-15 19 views
-2

Meine Tabellenansicht kann keine Daten darin anzeigen. Es zeigt Resultset-Daten in der Konsole, kann aber nicht in der Tabellenansicht javafx angezeigt werden. Bitte helfen Sie.javafx Tabellenansicht zeigt keine Daten aus der Datenbank

Klasse Zimmerdetails

package application; 

public class RoomDetails<object> { 

    rmlist rmList = new rmlist(); 
    getroom getRoom = new getroom(); 

    @FXML 
    private Button btnRoom_add; 
    @FXML 
    private Button btnRoom_update; 
    @FXML 
    private Button btnRoom_del; 
    @FXML 
    private TableView<ListRoom> tblroomdetails; 
    @FXML 
    private TableColumn<object, Object> tblroomno; 
    @FXML 
    private TableColumn<object, Object> tblroomtype; 
    @FXML 
    private TableColumn<object, Object> tblac; 
    @FXML 
    private TableColumn<object, Object> tbltariff; 
    @FXML 
    private TableColumn<object, Object> tblstatus; 
    @FXML 
    private Label lblRoomdetails; 


    Dbconnection dbcon = new Dbconnection(); 
    Connection con; 
    PreparedStatement pst; 
    ResultSet rs; 

    @FXML 
    public void btnRoom_addonAction(ActionEvent event) throws IOException{ 
     FXMLLoader fXMLLoader = new FXMLLoader(); 
     fXMLLoader.setLocation(getClass().getResource("/application/AddRoom.fxml")); 
     try{ 

    fXMLLoader.load(); 
      Parent parent = fXMLLoader.getRoot(); 
      Scene scene = new Scene(parent); 
      scene.setFill(new Color(0, 0, 0, 0)); 
      AddRoom addRoom = fXMLLoader.getController(); 
      addRoom.lbl_Add_Room.setText("ADD Room"); 
      Stage stage = new Stage(); 
      stage.setScene(scene); 
      stage.initModality(Modality.APPLICATION_MODAL); 
      stage.initStyle(StageStyle.TRANSPARENT); 
      stage.show(); 

     } 
     catch(IOException e){ 
      e.printStackTrace(); 
     } 
     } 

    public void viewDetails() { 
     tblroomdetails.setItems(rmList.roomlist); 
     getRoom.rmview(rmList); 
     tblroomno.setCellValueFactory(new PropertyValueFactory<>("roomno")); 
     tblroomtype.setCellValueFactory(new PropertyValueFactory<>("rmtype")); 
     tblac.setCellValueFactory(new PropertyValueFactory<>("acstat")); 
     tbltariff.setCellValueFactory(new PropertyValueFactory<>("rmtariff")); 
     tblstatus.setCellValueFactory(new PropertyValueFactory<>("rmstatus")); 

}  
} 

Klasse getRoom

package application; 

public class getroom { 


    Dbconnection dbcon = new Dbconnection(); 
    Connection con; 
    PreparedStatement pst; 
    ResultSet rs; 

    public void rmview(rmlist rmList) { 
     con = dbcon.geConnection(); 
     try{ 
      pst = con.prepareStatement("select * from room"); 
      rs = pst.executeQuery(); 
      System.out.println(rs); 
      while (rs.next()){ 
       rmList.roomno = rs.getString(1); 
       rmList.rmtype = rs.getString(2); 
       rmList.acstat = rs.getString(3); 
       rmList.rmtariff = rs.getString(4); 
       rmList.rmstatus = rs.getString(5); 
       } 
       rs.close(); 
       pst.close(); 
       con.close(); 

     } catch (SQLException e) { 
      e.printStackTrace(); 
      } 
    } 
    } 

Klasse listroom

package application; 

public class ListRoom { 

    public String roomno; 
    public String rmtype; 
    public String acstat; 
    public String rmtariff; 
    public String rmstatus; 
    public ListRoom(String roomno, String rmtype, String acstat, String rmtariff, String rmstatus) { 
     super(); 
     this.roomno = roomno; 
     this.rmtype = rmtype; 
     this.acstat = acstat; 
     this.rmtariff = rmtariff; 
     this.rmstatus = rmstatus; 
    } 
    public String getRoomno() { 
     return roomno; 
    } 
    public void setRoomno(String roomno) { 
     this.roomno = roomno; 
    } 
    public String getRmtype() { 
     return rmtype; 
    } 
    public void setRmtype(String rmtype) { 
     this.rmtype = rmtype; 
    } 
    public String getAcstat() { 
     return acstat; 
    } 
    public void setAcstat(String acstat) { 
     this.acstat = acstat; 
    } 
    public String getRmtariff() { 
     return rmtariff; 
    } 
    public void setRmtariff(String rmtariff) { 
     this.rmtariff = rmtariff; 
    } 
    public String getRmstatus() { 
     return rmstatus; 
    } 
    public void setRmstatus(String rmstatus) { 
     this.rmstatus = rmstatus; 
    } 


} 

Klasse rmlist

package application; 

public class rmlist { 

    public String roomno; 
    public String rmtype; 
    public String acstat; 
    public String rmtariff; 
    public String rmstatus; 
public ObservableList<ListRoom> roomlist = FXCollections.observableArrayList(); 

} 

Klasse DBConnection

package application; 

class DBconnection{ 
     public Connection con; 
     String username = "root"; 
     String password = "123456"; 
     String driverclass = "com.mysql.jdbc.Driver"; 
     String db_url = "jdbc:mysql://localhost:3306/"; 
     String unicode= "?useUnicode=yes&characterEncoding=UTF-8&useSSL=false"; 

     public Connection mkDataBase() throws SQLException{ 
       try { 
        Class.forName("com.mysql.jdbc.Driver"); 
        con = DriverManager.getConnection(db_url, username, password); 

       } catch (Exception e){ 

       } 
       return con; 
      } 

      public Connection geConnection(){ 

       try { 
        Class.forName("com.mysql.jdbc.Driver"); 
        con = DriverManager.getConnection(db_url+"hotel"+unicode, username, password); 

       } catch (ClassNotFoundException | SQLException ex) { 
        System.out.println("Too Many Connection"); 
       } 

       return con; 
      } 
     } 
+0

Und was ist 'Dbconnection'? –

+0

@James_D Dies könnte die fehlende Klassendefinition sein :)) – NwDev

+3

Ich werde nie verstehen, warum Menschen, die Hilfe wollen, sich nicht die Zeit nehmen können, um sicherzustellen, dass ihre Frage Sinn ergibt. –

Antwort

1

Im getRoom.rmview Methode füllen Sie die Felder der rmview Instanz immer wieder zuweisen, aber man kann nie die roomlist von rmview wird nie geändert modifizieren; es bleibt leer. Da Sie roomlist in TableView verwenden, sind keine Daten zu zeigen.

// remove data previously in the list 
rmList.roomlist.clear(); 

while (rs.next()){ 
    rmList.roomlist.add(new ListRoom(rs.getString(1), 
            rs.getString(2), 
            rs.getString(3), 
            rs.getString(4), 
            rs.getString(5))); 
} 

Außerdem empfehle ich the naming conventions anhaftenden:

Sie sollten stattdessen ein neues Element für jede Zeile der Datenbankabfrage zurückgibt hinzuzufügen. Vor allem der Teil über Abkürzungen, da dies Ihren Code für andere schwer lesbar macht. Außerdem ist object eine schlechte Wahl als Name für einen Typparameter. Dies führt zu Verwirrung und in der Regel werden für Typparameter einzelne Großbuchstaben verwendet.

Auch der Zweck der rmlist Klasse ist unklar. Es enthält die gleichen Felder wie ListRoom, enthält aber auch eine Liste, in der die Daten tatsächlich gespeichert werden sollen. Warum brauchst du diese Felder? Benötigen Sie überhaupt rmlist oder könnte es einfach durch ObservableList<ListRoom> ersetzt werden?

+0

Vielen Dank, es hat mein Problem gelöst. Ab dem nächsten Mal wird sich um die Benennung kümmern. –

Verwandte Themen