데이터를 저장할 항목이 필요합니다. "중급 클래스"라고하는 무언가가 TableView
의 데이터 유형이 될 것입니다.
꼭 필요한 클래스 일 필요는 없지만 일반적인 것을 사용하는 경우 코드가 훨씬 이해하기 어려울 것입니다.
TableView<List<String>> unitsTableView = new TableView<>();
idUnit = new TableColumn<List<String>, String>("Id");
idUnit.setCellValueFactory(new Callback<CellDataFeatures<List<String>, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<List<String>, String>> data) {
return new ReadOnlyStringWrapper(data.getValue().get(0)) ;
}
});
shortNameUnit = new TableColumn<List<String>, String>("Short Name");
shortNameUnit.setCellValueFactory(new Callback<CellDataFeatures<List<String>, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<List<String>, String>> data) {
return new ReadOnlyStringWrapper(data.getValue().get(1)) ;
}
});
nameUnit = new TableColumn<List<String>, String>("Name");
nameUnit.setCellValueFactory(new Callback<CellDataFeatures<List<String>, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<List<String>, String>> data) {
return new ReadOnlyStringWrapper(data.getValue().get(2)) ;
}
});
다음
public static ObservableList<List<String>> getUnits() {
final ObservableList<List<String>> data = FXCollections.observableArrayList();
if (openConnection()) {
try {
rs = st.executeQuery("SELECT * FROM units");
while (rs.next()) {
List<String> unit = new ArrayList<>();
unit.add(rs.getString("id_unit"));
unit.add(rs.getString("short_name"));
unit.add(rs.getString("name"));
data.add(unit);
}
} catch (Exception ex) {
Logger.getLogger(SQLConnect.class.getName()).log(Level.SEVERE, null, ex);
}
}
closeConnection();
return data;
}
을하지만 지금 당신의 코드는 대표하는 데이터의 의미의 거의 찾아 볼 수없는 것입니다 예를 들어, 당신은 단지 각 행을 보유 할 List<String>
를 사용할 수 있습니다.
ResultSet
을 여러 가지 이유로 직접 사용할 수 없습니다. 하나는 TableView의 데이터가 임의 액세스 목록으로 표시된다는 것입니다. ResultSet
은 데이터 행 목록을 나타내는 것으로 생각할 수 있지만 List
인터페이스를 구현하지 않으며 임의 액세스 기능이 없습니다 (행 번호 5 등을 확보 할 수있는 보장 된 방법이 없음). 또 다른 이유는 ResultSet
에 라이브 JDBC 자원이 필요합니다 (또는 적어도 JDBC 드라이버 구현에 따라 필요할 수 있음). 따라서 TableView가 범위 내에있는 동안 데이터베이스 테이블을 잠글 위험이 있습니다.
왜 데이터 표현 클래스를 생성하지 않으시겠습니까?