当前位置:首页 > 后端开发 > 正文

javafx怎么和数据库连接

vaFX 本身不直接连接数据库,需要借助JDBC,你需要先添加数据库驱动到项目,然后使用 DriverManager.getConnection()获取连接,再通过SQL语句操作数据库,最后关闭连接。

JavaFX与数据库连接详解

JavaFX是一种用于构建桌面应用程序的现代工具包,它提供了丰富的UI组件和事件处理机制,在开发JavaFX应用程序时,经常需要与数据库进行交互,以实现数据的存储、检索和管理,本文将详细介绍如何在JavaFX中连接数据库,包括准备工作、连接步骤以及常见问题的解决方案。

准备工作

  1. 安装JavaFX环境:确保你的开发环境中已经安装了JavaFX,如果你使用的是IntelliJ IDEA或Eclipse等IDE,可以通过插件管理器安装JavaFX插件。

  2. 添加JDBC驱动:根据你所使用的数据库类型(如MySQL、PostgreSQL、Oracle等),需要在项目中添加相应的JDBC驱动程序,对于MySQL,你需要下载mysql-connector-java.jar并将其添加到项目的类路径中。

  3. 配置项目依赖:如果你使用Maven或Gradle等构建工具,可以在pom.xmlbuild.gradle文件中添加相应的依赖项。

    javafx怎么和数据库连接  第1张

连接数据库的基本步骤

  1. 加载JDBC驱动:使用Class.forName()方法加载数据库驱动程序,这一步是必要的,因为JDBC需要知道如何与特定的数据库进行通信。

    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
  2. 创建数据库连接字符串:定义URL、用户名和密码以便于后续使用,对于MySQL,连接字符串可能如下所示:

    String url = "jdbc:mysql://localhost:3306/mydatabase";
    String user = "root";
    String password = "password";
  3. 建立数据库连接:使用DriverManager.getConnection()方法创建数据库连接,这个方法会返回一个Connection对象,你可以用它来执行SQL语句。

    Connection connection = null;
    try {
        connection = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
        e.printStackTrace();
    }
  4. 执行SQL查询并处理结果集:使用Statement对象执行查询,并使用ResultSet处理结果,你可以遍历ResultSet来获取查询结果,并将其显示在JavaFX界面上。

    String query = "SELECT  FROM mytable";
    Statement statement = null;
    ResultSet resultSet = null;
    try {
        statement = connection.createStatement();
        resultSet = statement.executeQuery(query);
        while (resultSet.next()) {
            // 处理结果集
            System.out.println(resultSet.getString("column_name"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭资源
        try {
            if (resultSet != null) resultSet.close();
            if (statement != null) statement.close();
            if (connection != null) connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

将数据绑定到JavaFX界面组件

  1. 创建数据模型:定义一个Java类来表示数据库表中的一行数据,这个类通常包含与表列对应的属性,以及相应的getter和setter方法。

    public class Person {
        private int id;
        private String name;
        private String email;
        // 构造函数、getter和setter方法
        public Person(int id, String name, String email) {
            this.id = id;
            this.name = name;
            this.email = email;
        }
        public int getId() { return id; }
        public void setId(int id) { this.id = id; }
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
        public String getEmail() { return email; }
        public void setEmail(String email) { this.email = email; }
    }
  2. 填充数据模型:从数据库中读取数据并填充到数据模型中,你可以遍历ResultSet,为每一行数据创建一个Person对象,并将其添加到一个列表中。

    List<Person> personList = new ArrayList<>();
    try {
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            String email = resultSet.getString("email");
            Person person = new Person(id, name, email);
            personList.add(person);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
  3. 将数据绑定到界面组件:在JavaFX中,可以使用TableView来展示数据,你需要定义TableViewTableColumn,并设置CellValueFactory以绑定数据模型的属性。

    TableView<Person> tableView = new TableView<>();
    TableColumn<Person, Integer> idColumn = new TableColumn<>("ID");
    TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
    TableColumn<Person, String> emailColumn = new TableColumn<>("Email");
    tableView.getColumns().addAll(idColumn, nameColumn, emailColumn);
    idColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
    nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
    emailColumn.setCellValueFactory(new PropertyValueFactory<>("email"));
    ObservableList<Person> personObservableList = FXCollections.observableArrayList(personList);
    tableView.setItems(personObservableList);
    VBox vbox = new VBox(tableView);
    Scene scene = new Scene(vbox);
    primaryStage.setScene(scene);
    primaryStage.show();

处理用户交互

  1. 添加数据:通过从用户界面获取输入,并将其插入到数据库中,你可以使用PreparedStatement来防止SQL注入攻击。

    Button addButton = new Button("Add");
    addButton.setOnAction(event -> {
        String name = nameTextField.getText();
        String email = emailTextField.getText();
        try {
            String insertQuery = "INSERT INTO mytable (name, email) VALUES (?, ?)";
            PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);
            preparedStatement.setString(1, name);
            preparedStatement.setString(2, email);
            preparedStatement.executeUpdate();
            // 更新TableView
            personList.add(new Person(getGeneratedId(), name, email));
            personObservableList.setAll(personList);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    });
  2. 删除数据:通过从TableView中选中一行,并从数据库中删除对应的数据。

0