Я пытаюсь заполнить табличное представление с помощью Javafx, база данных test.db содержит таблицу складов с тремя полями, идентификатором, именем и емкостью. Следующий код является примером программы
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.control.Button;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.TableColumn;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class javafxsqliteconntable extends Application {
@Override
public void start(Stage primaryStage){
primaryStage.setTitle("Que onda");
Label etiqueta = new Label("Hola Mundo");
Button boton = new Button("Presionar aqui");
TableView tableView = new TableView();
TableColumn<Integer, Person> column1 = new TableColumn<>("Id");
column1.setCellValueFactory(new PropertyValueFactory<>("id"));
TableColumn<String, Person> column2 = new TableColumn<>("name");
column2.setCellValueFactory(new PropertyValueFactory<>("Name"));
TableColumn<Double, Person> column3 = new TableColumn<>("capacity");
column3.setCellValueFactory(new PropertyValueFactory<>("Capacity"));
tableView.getColumns().add(column1);
tableView.getColumns().add(column2);
tableView.getColumns().add(column3);
VBox vbox = new VBox(20, etiqueta, boton, tableView);
ObservableList<Person> data = FXCollections.observableArrayList();
String sql = "SELECT id, name, capacity FROM warehouses";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name") + "\t" + rs.getDouble("capacity"));
data.addAll(new Person(rs.getInt("id"), rs.getString("name"), rs.getDouble("capacity")));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
Scene scene = new Scene(vbox, 300, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
public class Person {
private int Id;
private String Nombre = null;
private Double Capacidad = null;
public Person(int id, String nombre, Double capacidad) {
this.Id=id;
this.Nombre = nombre;
this.Capacidad = capacidad;
}
public int getId(){
return Id;
}
public String getnombre() {
return Nombre;
}
public Double getcapacidad() {
return Capacidad;
}
}
private Connection connect() {
String url ="jdbc:sqlite:test.db";
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
public static void main(String[] args) {
launch(args);
}
}
когда я скомпилировал, у меня нет никаких ошибок, соединение sqlite успешно установлено, и строка
System.out.println(rs.getInt("id") + "\t" + rs.getString("name") + "\t" + rs.getDouble("capacity"));
дает правильную информацию в командной строке консоли, но
data.addAll(new Person(rs.getInt("id"), rs.getString("name"), rs.getDouble("capacity")));
ничего не дает мне в Tableview, я что-то упустил?, я сделал наблюдаемый список, и у меня уже есть человек класса внутри программы. любая помощь приветствуется, чтобы получить данные, заполненные в tableview javafx. Спасибо заранее, любая помощь приветствуется.
TableView<Person>
. Никогда не используйте необработанные типы - person James_D   schedule 14.07.2020