You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下IntelliJ已连MySQL数据库扩展,JavaFX项目如何访问数据?

解决方案:JavaFX集成MySQL数据库的常见问题处理

1. IntelliJ数据库标签连接 vs 代码中的连接

IntelliJ的数据库标签是IDE自带的工具级连接,仅用于IDE内部操作数据库(比如可视化查询、编辑数据),和你的JavaFX应用程序运行时的连接完全独立。所以你必须在代码中重新创建数据库连接,才能让应用程序访问数据库。

2. 解决驱动找不到的问题

正确的依赖引入方式

绝对不要把jar包放到系统目录(比如/Library/Java/Extensions/),推荐用以下两种方式:

  • 使用Maven/Gradle管理依赖(推荐):
    如果你用Maven,在pom.xml中添加MySQL驱动依赖(注意MySQL 8.0+用的是com.mysql.cj.jdbc.Driver,旧版本才用com.mysql.jdbc.Driver):
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version> <!-- 替换为最新稳定版 -->
    </dependency>
    
    Gradle则在build.gradle中添加:
    implementation 'mysql:mysql-connector-java:8.0.33'
    
  • 手动添加jar包到项目:
    从MySQL官网下载驱动jar包,在IntelliJ中右键点击jar包 → Add as Library,选择你的项目模块,IDE会自动把它加入编译和运行路径。

注意驱动类名的变化

MySQL 8.0及以上版本的驱动类是com.mysql.cj.jdbc.Driver,不再是旧的com.mysql.jdbc.Driver,而且连接URL需要加上时区参数,比如:

String url = "jdbc:mysql://localhost:3306/your_db_name?useSSL=false&serverTimezone=UTC";

3. 代码中执行查询并在JavaFX展示数据示例

步骤1:创建数据库连接工具类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MysqlCon {
    private static final String URL = "jdbc:mysql://localhost:3306/your_db_name?useSSL=false&serverTimezone=UTC";
    private static final String USER = "your_username";
    private static final String PASSWORD = "your_password";

    public static Connection getConnection() throws SQLException {
        // MySQL 8.0+ 不需要手动加载驱动,DriverManager会自动发现
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

步骤2:创建实体类(对应数据库表)

假设你有个user表,字段为id、name、email:

public class User {
    private int id;
    private String name;
    private String email;

    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    // Getter方法,JavaFX属性绑定需要
    public int getId() { return id; }
    public String getName() { return name; }
    public String getEmail() { return email; }
}

步骤3:在JavaFX Controller中查询数据并绑定到TableView

import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class MainController {
    @FXML
    private TableView<User> userTable;
    @FXML
    private TableColumn<User, Integer> idCol;
    @FXML
    private TableColumn<User, String> nameCol;
    @FXML
    private TableColumn<User, String> emailCol;

    public void initialize() {
        // 配置TableColumn和实体类属性的映射
        idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
        nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
        emailCol.setCellValueFactory(new PropertyValueFactory<>("email"));

        // 加载数据到TableView
        loadUserData();
    }

    private void loadUserData() {
        List<User> userList = new ArrayList<>();
        try (Connection conn = MysqlCon.getConnection();
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM user")) {

            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String email = rs.getString("email");
                userList.add(new User(id, name, email));
            }

            userTable.getItems().addAll(userList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键注意点

  • 使用try-with-resources语法自动关闭Connection、Statement、ResultSet,避免资源泄漏。
  • 复杂应用建议把数据库操作放到单独的Service类中,用Task或Service在后台线程执行,避免阻塞UI线程。

内容的提问来源于stack exchange,提问作者k0mpvter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:07:34