Заполнение tableview с помощью базы данных в JavaFX
Я начинаю изучать javaFX, и мне нужно заполнить таблицу данными из моей базы данных. Я прочитал много кода в интернете, но я не нашел то, что искал. Я читаю этой но я не знаю как реализовать это последняя функция. Я прочитал какой-то другой код, чтобы сделать это, и до сих пор это часть моего кода:
@FXML private TableView<User> table;
@FXML private TableColumn<User, String> nameCol;
@FXML private TableColumn<User, String> emailCol;
private ObservableList<User> data;
public void initialize(URL location, ResourceBundle resources) {
nameCol.setCellValueFactory(new PropertyValueFactory(“name”));
emailCol.setCellValueFactory(new PropertyValueFactory(“email”));
buildData();
}
public void buildData() {
Connection connect = new Connection();
Statement st = connect.Connect();
data = FXCollections.observableArrayList();
try {
ResultSet rs = st.executeQuery("SELECT * FROM USER");
while (rs.next()) {
ObservableList<User> row = FXCollections.observableArrayList();
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
row.add(rs.getString(i));
System.out.println(row);
}
data.add(pol);
}
tabla.setItems(data);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
надеюсь, вы можете мне помочь
1 ответов
Я уверен, что это поможет вам:
public class DBClass{
public Connection getConnection() throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://192.168.0.1:3306/dbname","mysqluser","mysqluserpwd");
}
}
в классе контроллера выполните следующие действия :
@FXML
void initialize(){
assert tableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'UserMaster.fxml'.";
colUserName.setCellValueFactory(
new PropertyValueFactory<Usermaster,String>("userName"));
colPassword.setCellValueFactory(
new PropertyValueFactory<Usermaster,String>("userPassword"));
colUserType.setCellValueFactory(
new PropertyValueFactory<Usermaster,String>("userType"));
colPhoto.setCellValueFactory(
new PropertyValueFactory<Object,ImageView>("userPhoto"));
objDbClass = new DBClass();
try{
con = objDbClass.getConnection();
buildData();
}
catch(ClassNotFoundException ce){
logger.info(ce.toString());
}
catch(SQLException ce){
logger.info(ce.toString());
}
}
private ObservableList<Usermaster> data;
public void buildData(){
data = FXCollections.observableArrayList();
try{
String SQL = "Select * from usermaster Order By UserName";
ResultSet rs = con.createStatement().executeQuery(SQL);
while(rs.next()){
Usermaster cm = new Usermaster();
cm.userId.set(rs.getInt("UserId"));
Image img = new Image("tailoring/UserPhoto/User"+cm.getUserId().toString()+".jpg");
ImageView mv = new ImageView();
mv.setImage(img);
mv.setFitWidth(70);
mv.setFitHeight(80);
cm.userPhoto.set(mv);
cm.userName.set(rs.getString("UserName"));
cm.userPassword.set(rs.getString("UserPassword"));
cm.userType.set(rs.getString("UserType"));
data.add(cm);
}
tableview.setItems(data);
}
catch(Exception e){
e.printStackTrace();
System.out.println("Error on Building Data");
}
}
и создайте POJO отдельный java-файл для каждого объекта (таблицы), которым нужно манипулировать с помощью TableView
public class Usermaster{
public SimpleIntegerProperty userId = new SimpleIntegerProperty();
public ObjectProperty userPhoto = new SimpleObjectProperty();
public SimpleStringProperty userName = new SimpleStringProperty();
public SimpleStringProperty userPassword = new SimpleStringProperty();
public SimpleStringProperty userType = new SimpleStringProperty();
public SimpleStringProperty encPass = new SimpleStringProperty();
public SimpleStringProperty updt = new SimpleStringProperty();
public SimpleStringProperty uptm = new SimpleStringProperty();
public Integer getUserId() {
return userId.get();
}
public Object getUserPhoto() {
return userPhoto.get();
}
public String getUserName() {
return userName.get();
}
public String getUserPassword() {
return userPassword.get();
}
public String getUserType() {
return userType.get();
}
public String getEncPass() {
return encPass.get();
}
public String getUpdt() {
return updt.get();
}
public String getUptm() {
return uptm.get();
}
}
я протестировал эту программу, она работает отлично.