使用 JavaFX 和 SQLite 进行数据存储
引言
在软件开发中,常常需要使用数据库进行数据存储和管理。JavaFX 是一个用于构建富客户端应用程序的框架,而 SQLite 是一个轻量级的嵌入式数据库引擎。本文将介绍如何在 JavaFX 应用程序中使用 SQLite 进行数据存储,以及如何进行数据库的增删改查操作。
准备工作
在开始之前,我们需要准备以下环境和工具:
- JDK 8 或更高版本
- JavaFX SDK
- SQLite JDBC 驱动(可从官方网站下载)
确保已经正确安装了 JDK 和 JavaFX SDK,并将 SQLite JDBC 驱动的 JAR 文件添加到项目的类路径中。
创建数据库连接
在 JavaFX 中,我们可以使用 javafx.scene.control
包中的 Button
、TextField
和 TableView
等控件来构建用户界面。而 SQLite 数据库的操作则需要借助 java.sql
包中的类和接口。
首先,我们需要创建一个 SQLiteHelper
类来管理数据库连接和操作。以下是一个简单的示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SQLiteHelper {
private Connection connection;
public SQLiteHelper() {
try {
// 连接到 SQLite 数据库
String url = "jdbc:sqlite:path/to/database.db";
connection = DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection() {
return connection;
}
public void close() {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在上面的示例中,我们通过 DriverManager.getConnection()
方法来连接到 SQLite 数据库。需要注意的是,url
参数指定了数据库文件的路径。如果该文件不存在,则会自动创建一个新的数据库文件。通过 getConnection()
方法可以获取到连接对象,而 close()
方法用于关闭数据库连接。
创建数据表
在 SQLite 中,我们可以使用 SQL 语句来创建和管理数据表。下面是一个创建学生表的示例代码:
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLiteHelper {
// ...
public void createStudentTable() {
String sql = "CREATE TABLE IF NOT EXISTS students (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT NOT NULL," +
"age INTEGER NOT NULL," +
"score REAL NOT NULL" +
")";
try (Statement statement = connection.createStatement()) {
statement.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
上面的代码中,我们使用 CREATE TABLE IF NOT EXISTS
语句创建了一个名为 students
的数据表。该表包含了 id
、name
、age
和 score
四个字段,分别表示学生的唯一标识、姓名、年龄和分数。
数据库操作
有了数据库连接和数据表,我们就可以进行数据库的增删改查操作了。以下是一些常见的操作示例:
插入数据
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class SQLiteHelper {
// ...
public void insertStudent(String name, int age, double score) {
String sql = "INSERT INTO students (name, age, score) VALUES (?, ?, ?)";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, name);
statement.setInt(2, age);
statement.setDouble(3, score);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
上述代码中,我们使用 INSERT INTO
语句将一条新的学生记录插入到 students
表中。通过 PreparedStatement
对象我们可以方便地设置参数,并调用 executeUpdate()
方法执行插入操作。
更新数据
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class SQLiteHelper {
// ...
public void updateStudent(int id, String name, int age, double score) {
String sql = "UPDATE students SET name = ?, age = ?, score = ? WHERE id = ?";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, name);
statement.setInt(2, age);
statement.setDouble(3, score);
statement.setInt(4, id);
statement