sql >> Database teknologi >  >> RDS >> Oracle

Formatering af datokolonne i javaFX TableView til data hentet fra Oracle DB

Du har simpelthen glemt at sætte ID'er i dine kolonner... Det skal være sådan her:

<TableColumn fx:id="MRN" prefWidth="75.0" text="C1" />
<TableColumn fx:id="LASTNAME" prefWidth="75.0" text="C2" />

Uden dem forbliver dit MRN-felt i "initialize"-metoden "nul", fordi FXMLLoader ikke finder et matchende (ved ID) felt i fxml-filen. din kode, for eksempel TextField "mrn" og TableColumn "MRN") fungerer faktisk, det er ret forvirrende.

Desuden er der problemer med din datamodel og med din metode populateData:

  • Først og fremmest skal din TableView være af typen Person, ikke List:Person er den type data, som din tabel vil indeholde. Derfor skal TableColumns erklæres som TableColumn
  • For det andet skal du beslutte, om du vil bruge FXML eller bruge Java-kode. Du har allerede kolonnerne i tabellen (via FXML), men i din populateData-metode rydder du dem og prøver at tilføje dem igen. Hvis du kender kolonnerne på forhånd, skal du bare bruge FXML og skære denne del af din populateData-metode væk
  • For det tredje, når du læser de resultater, du får fra databasen, skal du oprette et Person-objekt for hver række og derefter tilføje dette objekt til din dataliste. Noget som dette:

            while (rs.next()) {                   
                Person p = new Person();
                p.setMRN(rs.getString(1));
                p.setLastName(rs.getString(2));
                Date x = rs.getDate(3);
                if (x != null) {
                    p.setDateOfBirth(rs.getDate(3).toLocalDate());
                } else {
                    p.setDateOfBirth(LocalDate.MIN);
                }
                data.add(p);
            } 
    

Prøv at følge din kode med en debugger, det vil hjælpe dig med at forstå.

Med hensyn til datoformatering foreslår jeg at bruge en DateTimeFormatter:

DATEOFBIRTH.setCellValueFactory(new PropertyValueFactory<>("dateOfBirth"));
DATEOFBIRTH.setCellFactory(new PersonController.ColumnFormatter<>(DateTimeFormatter.ofPattern("MM/dd/yyyy")));

og modificer ColumnFormatter på denne måde:

private class ColumnFormatter<S, T> implements Callback<TableColumn<S, T>, TableCell<S, T>> {

    private final DateTimeFormatter format;

    public ColumnFormatter(DateTimeFormatter format) {
        super();
        this.format = format;
    }

    @Override
    public TableCell<S, T> call(TableColumn<S, T> arg0) {
        return new TableCell<S, T>() {
            @Override
            protected void updateItem(T item, boolean empty) {
                super.updateItem(item, empty);
                if (item == null || empty) {
                    setGraphic(null);
                } else {
                    LocalDate ld = (LocalDate) item;
                    String val = ld.format(format);
                    setGraphic(new Label(val));
                }
            }
        };
    }
}



  1. Forskellen mellem Oracles plus (+) notation og ansi JOIN notation?

  2. Bedste måde at fejlfange INDLEDE DATA LOKAL INFIL?

  3. Find mandage mellem 2 datoer

  4. Hvordan tildeler man flere id'er til en række i MySQL?