gpt4 book ai didi

java - 本教程存在问题 :Populate a tableview using database in JavaFX

转载 作者:行者123 更新时间:2023-12-02 04:51:11 26 4
gpt4 key购买 nike

按照本教程操作时,我收到 nullpointerxception: Populate a tableview using database in JavaFX

我对其进行了修改,使其更简单并适合我的需求:我有 Person 对象,而不是 Usermaster。

 while(rs.next()){
Person per = new Person();
per.ClientID.set(rs.getInt(1));
per.FirstName.set(rs.getString(2));
per.LastName.set(rs.getString(3));

由于 nullpointerxception,代码停止在 per.ClientID.set(rs.getInt(1)); 处。

如果我创建system.out.println(rs.getInt(1))(或任何其他列),我会得到该值...但看来我无法传递它到我的对象。

所有 Person 对象变量都是 SimpleString/IntergerProperty 类型,如教程中所示。

有人可以帮我找出我在编码过程中犯的错误吗?

谢谢

**答案:需要初始化值。

现在我没有错误,但我的表没有填充...

完整代码:

a) 主应用程序

package tableview;


import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application {

public static void main(String[] args) {
// TODO Auto-generated method stub
launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("view/FXMLTable.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}

}

模型类:

package tableview.model;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Person {
public SimpleIntegerProperty ClientID = new SimpleIntegerProperty();
public SimpleStringProperty FirstName = new SimpleStringProperty();
public SimpleStringProperty LastName = new SimpleStringProperty();

public SimpleIntegerProperty getClientID() {
return ClientID;
}
public SimpleStringProperty getFirstname() {
return FirstName;
}
public SimpleStringProperty getLastName() {
return LastName;
}
public IntegerProperty clientIDProperty(){
return ClientID;
}
public StringProperty firstNameProperty(){
return FirstName;

}
public StringProperty lastNameProperty(){
return LastName;
}
}

Controller 类:

package tableview.view;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import tableview.model.Person;


public class FXMLTableController{

@FXML
public TableView<Person> tableview ;
@FXML
private TableColumn<Person, Number> clientIdColumn;
@FXML
private TableColumn<Person, String> firstNameColumn;
@FXML
private TableColumn<Person, String> lastNameColumn;

@FXML
private void initialize() {
assert tableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'UserMaster.fxml'.";
clientIdColumn.setCellValueFactory(cellData -> cellData.getValue().
clientIDProperty());

firstNameColumn.setCellValueFactory(cellData -> cellData.getValue()
.firstNameProperty());
lastNameColumn.setCellValueFactory(cellData -> cellData.getValue()
.lastNameProperty());

buildData();

}

private ObservableList<Person> data;


public void buildData(){
data = FXCollections.observableArrayList();
Connection con = null;


try {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:tableviewdb.db");

String SQL = "Select * from INFO";
ResultSet rs = con.createStatement().executeQuery(SQL);
while(rs.next()){
Person per = new Person();
per.ClientID.set(rs.getInt("CLIENTID"));
per.FirstName.set(rs.getString("FIRSTNAME"));
per.LastName.set(rs.getString("LASTNAME"));

data.add(per);

}
tableview = new TableView<Person>();
tableview.setItems(data);
System.out.println(tableview.getItems().get(1).ClientID);
}
catch(Exception e){
e.printStackTrace();
System.out.println("Error on Building Data");
}
}
}

最佳答案

ClientID 为空。您没有初始化它。

如果它是一个属性,您应该为其创建正确的 getter 和 setter,而不是直接使用该属性。此外,您不应该在 ResultSet 的 getter 中使用 1、2 等。更好的做法是使用列名称。

关于java - 本教程存在问题 :Populate a tableview using database in JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com