sql >> データベース >  >> RDS >> Oracle

OracleDBから取得したデータのjavaFXTableViewの日付列のフォーマット

    列にIDを入力するのを忘れただけです...次のようにする必要があります:

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

    それらがないと、FXMLLoaderがfxmlファイルで一致する(IDによる)フィールドを見つけられないため、「initialize」メソッドのMRNフィールドは「null」のままになります。コード(たとえば、TextField"mrn"とTableColumn"MRN")は実際に機能しますが、かなり混乱します。

    さらに、データモデルとメソッドpopulateDataに問題があります:

    • まず、TableViewはListではなくPersonタイプである必要があります。Personは、テーブルが保持するデータのタイプです。したがって、TableColumnsはTableColumnとして宣言する必要があります
    • 次に、FXMLを使用するかJavaコードを使用するかを決定する必要があります。テーブルにはすでに(FXMLを介して)列がありますが、populateDataメソッドで列をクリアして、もう一度追加しようとします。事前に列がわかっている場合は、FXMLを使用して、populateDataメソッドのこの部分を切り取ってください
    • 3番目に、データベースから取得した結果を読み取るときは、行ごとにPersonオブジェクトを作成してから、そのオブジェクトをデータリストに追加する必要があります。このようなもの:

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

    デバッガーでコードをフォローしてみてください。理解するのに役立ちます。

    日付の書式設定については、DateTimeFormatterを使用することをお勧めします:

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

    次のようにColumnFormatterを変更します:

    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. MySQLクエリでBirthDate列を使用してAgeを取得するにはどうすればよいですか?

    2. PHP /MySQLUpdateチェックボックスの選択をデータベースに

    3. SQL Serverで外部キーを作成する方法(T-SQLの例)

    4. mysql.serverの開始時にPIDエラーが発生しましたか?