Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Định dạng cột ngày trong javaFX TableView cho dữ liệu được truy xuất từ ​​Oracle DB

Đơn giản là bạn đã quên đặt ID vào các cột của mình ... Nó phải như thế này:

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

Nếu không có chúng, trường MRN của bạn trong phương thức "khởi tạo" vẫn là "null" bởi vì FXMLLoader không tìm thấy trường phù hợp (theo ID) trong tệp fxml. Theo ý kiến ​​của tôi, trong khi có hai trường có tên chỉ khác nhau theo trường hợp (trong mã của bạn, ví dụ:TextField "mrn" và TableColumn "MRN") thực sự hoạt động, nó khá khó hiểu.

Hơn nữa, có vấn đề với mô hình dữ liệu của bạn và với phương thức populateData của bạn:

  • Trước hết, TableView của bạn phải thuộc loại Person, không phải List:Person là loại dữ liệu mà Bảng của bạn sẽ giữ. Do đó, TableColumns phải được khai báo là TableColumn
  • Thứ hai, bạn phải quyết định xem bạn muốn sử dụng FXML hay sử dụng mã Java. Bạn đã có các cột trong bảng (qua FXML), nhưng trong phương thức populateData, bạn xóa chúng và thử thêm lại. Nếu bạn biết trước các cột thì chỉ cần sử dụng FXML và cắt phần này của phương thức populateData của bạn đi
  • Thứ ba, khi bạn đọc kết quả nhận được từ cơ sở dữ liệu, bạn nên tạo một đối tượng Person cho mỗi hàng và sau đó thêm đối tượng đó vào danh sách dữ liệu của bạn. Một cái gì đó như thế này:

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

Hãy thử làm theo mã của bạn bằng trình gỡ lỗi, nó sẽ giúp bạn hiểu.

Đối với định dạng ngày, tôi khuyên bạn nên sử dụng DateTimeFormatter:

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

và sửa đổi ColumnFormatter theo cách này:

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. Các giá trị được phân tách bằng dấu phẩy trong Oracle

  2. kết nối từ xa sqlplus cho ORA-21561

  3. Làm cách nào để kiểm tra NLS_LANG của máy khách?

  4. Xác định xem ngày Oracle có vào cuối tuần không?

  5. Sự khác biệt giữa Oracle lnstant Client và Oracle Client