【SampleController.java】
package application;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableView;
public class SampleController {
@FXML private ResourceBundle resources; @FXML private URL location; @FXML private TableView<?> tableview; @FXML void initialize() { assert tableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'Sample.fxml'."; DB(); } public static void DB() { Connection connection = null; PreparedStatement pre_statement = null; ResultSet result_set = null; ObservableList<ObservableList> data = FXCollections.observableArrayList(); try { //MySQLの接続 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/orderdb?characterEncoding=UTF-8&serverTimezone=JST", "root", "パスワード"); //接続しているデータベース名を表示 System.out.println("MySQLに接続できました。"); System.out.println("getCatalog:" + connection.getCatalog() + "\r\n"); pre_statement = connection.prepareStatement("select * from goods limit 10"); result_set = pre_statement.executeQuery(); while(result_set.next()) { data.clear(); //一行ずつ(カラム) ObservableList<String> row = FXCollections.observableArrayList(); for(int i = 1; i <= result_set.getMetaData().getColumnCount(); i++) { //iはカラム番号 row.add(result_set.getString(i)); } data.add(row); System.out.println(data); ←ここでは正確にが出力されす。 } //テーブルビューに値代入 tableview.setItems(data); ←ここでエラーが出ます // データベースとの接続に失敗した場合 }catch(SQLException ex) { ex.printStackTrace(); System.err.println("MySQLに接続できませんでした。"); }finally { closeSQL(connection, pre_statement, result_set); } } static void closeSQL(Connection connection, PreparedStatement pre_statement, ResultSet result_set) { try { // データベースとの接続を解除 if (connection != null) { connection.close(); } if (pre_statement != null) { pre_statement.close(); } if (result_set != null) { result_set.close(); } }catch(SQLException ex) { System.err.println("Error closeSql Func"); //どこで、エラーが起こっているかが分かる ex.printStackTrace(); } }
}
【Main.java】
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("Sample.fxml"));
Scene scene = new Scene(root,600,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) { launch(args); }
}