Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Memformat Kolom Tanggal di javaFX TableView untuk Data yang diambil dari Oracle DB

Anda hanya lupa memasukkan ID di kolom Anda... Harus seperti ini:

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

Tanpa mereka bidang MRN Anda dalam metode "inisialisasi" tetap "null" karena FXMLLoader tidak menemukan bidang yang cocok (berdasarkan ID) di file fxml. kode Anda, misalnya, TextField "mrn" dan TableColumn "MRN") benar-benar berfungsi, cukup membingungkan.

Selain itu ada masalah dengan model data Anda dan dengan metode Anda populateData:

  • Pertama-tama TableView Anda harus bertipe Person, bukan List:Person adalah tipe data yang akan disimpan oleh Tabel Anda. Akibatnya TableColumns harus dideklarasikan sebagai TableColumn
  • Kedua, Anda harus memutuskan apakah Anda ingin menggunakan FXML atau menggunakan kode Java. Anda sudah memiliki kolom di tabel (melalui FXML), tetapi dalam metode populateData Anda menghapusnya dan mencoba menambahkannya lagi. Jika Anda mengetahui kolom sebelumnya, gunakan saja FXML dan potong bagian ini dari metode populateData Anda
  • Ketiga ketika Anda membaca hasil yang Anda dapatkan dari database, Anda harus membuat objek Person untuk setiap baris dan kemudian menambahkan objek itu ke daftar data Anda. Sesuatu seperti ini:

            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);
            } 
    

Coba ikuti kode Anda dengan debugger, ini akan membantu Anda memahami.

Untuk format tanggal saya sarankan menggunakan DateTimeFormatter:

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

dan ubah ColumnFormatter dengan cara ini:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tampilkan Output Dynamic EXECUTE Dalam pl/sql Dari sqlplus

  2. Oracle:Bagaimana cara mengetahui apakah ada transaksi yang tertunda?

  3. Penggabungan Oracle CTE

  4. SQL Inner bergabung pada pernyataan tertentu

  5. Bagaimana cara mengantre di tabel Oracle AQ saat dikomit dengan Java dan mengonsumsi dengan klien JMS