首页 > 数据库 >JavaFX + MySQL:动态显示数据库查询结果的JavaFX应用程序

JavaFX + MySQL:动态显示数据库查询结果的JavaFX应用程序

时间:2024-11-19 22:42:52浏览次数:3  
标签:动态显示 name javafx 数据库 JavaFX MySQL import ListView

文章目录

示例概述

我们将创建一个JavaFX应用程序,该应用程序连接到MySQL数据库,查询某个表中的数据,并将结果显示在一个ListView中。我们将使用以下工具和技术:

  • JavaFX
  • MySQL
  • JDBC

示例代码

导入必要的包
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
定义主类和主方法
public class MainApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建UI组件
        ListView<String> listView = new ListView<>();
        VBox vBox = new VBox(listView);
        Scene scene = new Scene(vBox, 300, 250);

        // 设置舞台
        primaryStage.setTitle("JavaFX MySQL Connection Example");
        primaryStage.setScene(scene);
        primaryStage.show();

        // 连接数据库并获取数据
        connectToDatabase(listView);
    }

    private void connectToDatabase(ListView<String> listView) {
        String url = "jdbc:mysql://localhost:3306/your_database_name";
        String user = "your_username";
        String password = "your_password";

        // 创建一个可观察的列表来存储查询结果
        ObservableList<String> items = FXCollections.observableArrayList();

        try {
            // 加载MySQL JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 建立数据库连接
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("Database connection established.");

            // 创建Statement对象
            Statement stmt = conn.createStatement();
            String query = "SELECT * FROM your_table_name";

            // 执行查询
            ResultSet rs = stmt.executeQuery(query);

            // 处理结果集
            while (rs.next()) {
                // 假设表中有名为"column_name"的列
                String data = rs.getString("column_name");
                items.add(data); // 将数据添加到可观察的列表中
            }

            // 更新ListView的项列表
            listView.setItems(items);

            // 关闭资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

详细解释

导入必要的包
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
  • javafx.application.Application:JavaFX应用程序的基类。
  • javafx.collections.FXCollectionsObservableList:用于创建可观察的列表,这是JavaFX控件(如ListView)所需的数据结构。
  • javafx.scene.Scene:表示JavaFX场景。
  • javafx.scene.control.ListView:用于显示列表数据的控件。
  • javafx.scene.layout.VBox:垂直布局容器。
  • javafx.stage.Stage:表示JavaFX舞台。
  • java.sql.*:用于数据库操作的类和接口。
定义主类和主方法
public class MainApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建UI组件
        ListView<String> listView = new ListView<>();
        VBox vBox = new VBox(listView);
        Scene scene = new Scene(vBox, 300, 250);

        // 设置舞台
        primaryStage.setTitle("JavaFX MySQL Connection Example");
        primaryStage.setScene(scene);
        primaryStage.show();

        // 连接数据库并获取数据
        connectToDatabase(listView);
    }

    public static void main(String[] args) {
        launch(args);
    }
}
  • MainApp类继承自Application,是JavaFX应用程序的入口点。
  • start方法是JavaFX应用程序的启动方法,负责创建和显示用户界面。
  • main方法是JavaFX应用程序的入口点,调用launch方法启动应用程序。
连接数据库并处理查询结果
private void connectToDatabase(ListView<String> listView) {
    String url = "jdbc:mysql://localhost:3306/your_database_name";
    String user = "your_username";
    String password = "your_password";

    // 创建一个可观察的列表来存储查询结果
    ObservableList<String> items = FXCollections.observableArrayList();

    try {
        // 加载MySQL JDBC驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 建立数据库连接
        Connection conn = DriverManager.getConnection(url, user, password);
        System.out.println("Database connection established.");

        // 创建Statement对象
        Statement stmt = conn.createStatement();
        String query = "SELECT * FROM your_table_name";

        // 执行查询
        ResultSet rs = stmt.executeQuery(query);

        // 处理结果集
        while (rs.next()) {
            // 假设表中有名为"column_name"的列
            String data = rs.getString("column_name");
            items.add(data); // 将数据添加到可观察的列表中
        }

        // 更新ListView的项列表
        listView.setItems(items);

        // 关闭资源
        rs.close();
        stmt.close();
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  • 加载MySQL JDBC驱动:使用Class.forName加载MySQL JDBC驱动。
  • 建立数据库连接:使用DriverManager.getConnection建立数据库连接。
  • 创建Statement对象:使用Connection.createStatement创建Statement对象。
  • 执行查询:使用Statement.executeQuery执行SQL查询,返回ResultSet对象。
  • 处理结果集:使用ResultSet.next遍历结果集中的每一行,使用ResultSet.getString获取特定列的数据,并将其添加到可观察的列表中。
  • 更新ListView的项列表:使用ListView.setItems方法将可观察的列表设置为ListView的项列表。
  • 关闭资源:关闭ResultSetStatementConnection对象,以释放资源。

运行效果

当你编译并运行上述代码时,将会出现一个JavaFX窗口,窗口中包含一个ListView控件,显示从MySQL数据库中查询到的数据。具体效果如下:

  1. 启动应用程序:程序启动后,会显示一个标题为“JavaFX MySQL Connection Example”的窗口。
  2. 显示数据ListView控件中会列出从数据库表中查询到的所有数据项。
  3. 控制台输出:如果连接成功,控制台会输出“Database connection established.”。

示例数据库表结构

假设你的数据库表结构如下:

CREATE TABLE your_table_name (
    id INT AUTO_INCREMENT PRIMARY KEY,
    column_name VARCHAR(255)
);

INSERT INTO your_table_name (column_name) VALUES ('Item 1');
INSERT INTO your_table_name (column_name) VALUES ('Item 2');
INSERT INTO your_table_name (column_name) VALUES ('Item 3');

注意事项

  1. 异常处理:确保所有的数据库操作都包含适当的异常处理机制,以便捕获并处理可能发生的错误。
  2. 资源管理:每次操作完成后都要关闭ResultSetStatementConnection对象,以避免资源泄漏。
  3. 线程安全:如果在多线程环境中使用数据库连接,请确保线程安全。可以考虑使用连接池来管理数据库连接。
  4. 性能优化:对于大量数据的查询,考虑使用分页或其他优化技术来提高性能。
  5. UI更新:在JavaFX中,更新UI组件的操作必须在JavaFX应用程序线程中进行。如果数据库操作是在后台线程中进行的,可以使用Platform.runLater方法将UI更新操作调度到JavaFX应用程序线程。

标签:动态显示,name,javafx,数据库,JavaFX,MySQL,import,ListView
From: https://blog.csdn.net/2301_77163982/article/details/143897709

相关文章

  • 一文带你从入门到精通——MySQL(一)
    目录一. MySQL基础知识1.1引言1.2数据库1.2.1数据库简介1.2.2 数据库分类1.3SQL语句1.3.1SQL通用语法1.3.2SQL数据类型1.3.3SQL字段约束1.3.3.1主键约束1.3.3.2 非空约束1.3.3.3 唯一约束1.3.3.4 默认约束1.3.3 SQL分类1.3.3.1常用DDL1.3.3.2 ......
  • 一文带你从入门到精通——MySQL(二)
    建议先阅读我的上一篇博客,掌握一定的MySQL基础知识后再阅读本文,链接如下:一文带你从入门到精通——MySQL(一)-CSDN博客、目录二、MySQL单表查询2.1基础查询2.2条件查询2.3排序查询2.4聚合查询2.5分组查询2.6分页查询2.7MySQL语句的执行顺序二、MySQL单表查询......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现一
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现二
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • 5分钟,轻松搞定MySQL数据库等保测评
    前言作为数据库运维人员,需要理性看待数据库等保测评相关工作,完全按照测评结果对数据库进行整改,或完全忽略测评结果都是不可取的,过犹不及,物极必反。比如MySQL和Oracle为了防止密码被暴力破解的连接错误密码延时功能,随着连续输错密码次数的增加,连接的延时也会逐渐增加,如果设......
  • 【MySQL】约束
    【MySQL】约束文章目录【MySQL】约束前言一、概述二、约束演示三、外键约束总结前言本篇文章就MySQL约束,讲到约束的概述,约束演示以及外键约束。一、概述概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整......
  • MySQL常用命令
    MySQL#用户管理及授权CREATEUSERluke@localhostIDENTIFIEDBY'linuxprobe';grantallon*.*toluke@localhost;grantselect,update,delete,insertonmysql.usertoluke@localhost;#查询用户权限showgrantsforluke@localhost;#创建DBcreatedatabaselinu......
  • MySQL 逻辑备份与恢复指南
    MySQL逻辑备份与恢复指南引言逻辑备份将数据库数据和结构导出为SQL文件,用于数据迁移或恢复。本文提供常用备份和恢复命令,适用于单表、单数据库、多数据库及所有数据库场景。命令行参数说明<参数>:尖括号内的内容为用户需替换的实际值(例如:主机、端口、用户名等)。>:表示输出重......
  • Chainlit快速实现AI对话应用将聊天记录的持久化到MySql关系数据库中
    概述默认情况下,Chainlit应用不会保留其生成的聊天和元素。即网页一刷新,所有的聊天记录,页面上的所有聊天记录都会消失。但是,存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。之前写过一篇文章《Chainlit快速实现AI对话应用并将聊天数据的持久化到sqllite本......
  • MySQL查询慢的根本原因
    这里的表空间呢,指的是独立表空间,在MySQL中,表空间分为2种,分别是共享表空间和独立表空间,不过在MySQL5.6.6及后续版本默认使用的是独立表空间,说白了就是一个独立表空间在磁盘中会单独对应一个表空间文件,而一个表空间文件存放着MYSQL数据库中一张表的数据。在表空间中有很多数......