零基础直接上手java跨平台桌面程序,使用javafx(六)查询sqlite数据显示到TableView中

我们使用jdbc查询sqlite的一个表显示到TableView中

在hello-view的onMouseClicked里面填上"openclick2",然后在HelloController写上openclick2的相关代码@FXML protected void openclick2() { }。我们要先配置好sqlite的jdbc驱动(略)。openclick2的代码如下:

java 复制代码
 protected void openclick2()
    {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("文件sqlite");
        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("sqlite", "*.db", "*.db3"));
        // 设置文件选择框的初始目录(可选)
        //fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
        // 显示文件选择框并获取所选文件
        File selectedFile = fileChooser.showOpenDialog(new Stage());

        if (selectedFile != null) {
            String fileName = selectedFile.getName();
            String databaseUrl = "jdbc:sqlite:" + selectedFile.getPath();
            try (Connection connection = DriverManager.getConnection(databaseUrl)) {
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery("SELECT * FROM sheet1");

                // 清除旧的列
                TableView1.getColumns().clear();

                // 获取元数据以动态创建列
                ResultSetMetaData metaData = resultSet.getMetaData();
                int columnCount = metaData.getColumnCount();
                for (int i = 1; i <= columnCount; i++) {
                    final int columnIndex = i;
                    TableColumn<ObservableList<Object>, Object> column = new TableColumn<>(metaData.getColumnName(i));
                    column.setCellValueFactory(param -> new javafx.beans.property.SimpleObjectProperty<>(param.getValue().get(columnIndex - 1)));
                    TableView1.getColumns().add(column);
                }

                // 加载数据到TableView
                ObservableList<ObservableList<Object>> data = FXCollections.observableArrayList();
                while (resultSet.next()) {
                    ObservableList<Object> row = FXCollections.observableArrayList();
                    for (int i = 1; i <= columnCount; i++) {
                        row.add(resultSet.getObject(i));
                    }
                    data.add(row);
                }
                TableView1.setItems(data);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

我们可以看到jdbc取数据的语句非常的简单,比c#的ado还要简单。

复制代码
try (Connection connection = DriverManager.getConnection(databaseUrl)) {
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT * FROM sheet1");}

Connection 对象:Connection 对象代表与数据库的连接。要连接到数据库,您需要使用 DriverManager 类的 getConnection 方法,该方法接收数据库URL、用户名和密码作为参数。

Statement 对象:Statement 对象用于执行静态SQL语句并返回其生成的结果。

ResultSet 对象:ResultSet 对象代表SQL查询的结果集,通常是通过执行 Statement 对象生成的。

运行效果如下:

相关推荐
Fuyo_11197 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
dishugj7 小时前
oracle日志切换三条命令区别
数据库
Patrick在香港7 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
Sarvartha7 小时前
Date、LocalDate、LocalTime、LocalDateTime、DateTimeFormatter类
java
悟道书生7 小时前
(一)Navicate为什么转存结构和数据只转存表而不包含建库?
数据库·oracle
阿俊-全栈开发7 小时前
LikeShop 多商户 Java 版商城微服务模块拆分与部署架构演进实践
java·微服务·架构·likeshop开源商城·多商户源码
赤龙ERP8 小时前
ERP周报:连接器开闸、国产GPU进场与智能工厂253家
数据库·人工智能·大模型·rpa·erp·企业数字化·builderpattern
Wang's Blog8 小时前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
lusklusklusk8 小时前
SQL Server补丁版本号为什么“日期新反而版本低”?——GDR、CU、CU+GDR 版本号规则与升级路径详解
数据库
我命由我123458 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理