本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
如何打开或创建 SQLite 数据库
目的。 打开(或在不存在时创建)一个 SQLite 数据库并创建其表。在 CrossFly 中,入口是 SqliteDb,一个 AutoCloseable 句柄 —— 始终使用 try (...) 以确保关闭原生连接。
使用的 API
SqliteDb.open(String filename)—— 以读/写模式打开/创建一个未加密的数据库(OPEN_DEFAULT = OPEN_READWRITE | OPEN_CREATE)。返回一个SqliteDb。SqliteDb.openMemory()—— 打开一个内存中数据库(:memory:),易失:关闭时即消失。非常适合测试和临时缓存。SqliteDb.exec(String sql)—— 运行一条或多条无结果的语句(DDL、PRAGMA、批量 DML)。用于CREATE TABLE、CREATE INDEX、PRAGMA ...。出错时抛出SqliteException。SqliteDb.close()—— 关闭原生连接。幂等(调用两次是安全的)。try-with-resources会自动调用它。SqliteDb.version()—— 返回 SQLite 库的版本字符串(对诊断很有用)。
文件路径。 传入一个可写的文件路径(视平台而定)。这里不要用
Gdx.graphics做任何事;SQLite 与 UI 无关。关于各平台的文件位置,请参阅存储指南。
完整示例(复制、粘贴并运行)
package com.exemplo;
import dev.crossfly.ui.*; // Window
import dev.crossfly.ui.layout.*; // VerticalLayout
import dev.crossfly.sqlite.*; // SqliteDb, SqliteException
/** 可执行的主界面。将 launcher 指向此类(classname)并运行:gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// 1) 文件型数据库(不存在则创建)
try (SqliteDb db = SqliteDb.open("app.db"))
{
db.exec(
"CREATE TABLE IF NOT EXISTS person(" +
" id INTEGER PRIMARY KEY," +
" name TEXT NOT NULL," +
" age INTEGER)");
// ... 在此使用数据库 ...
}
// 离开 try 时连接已关闭
// 2) 内存型数据库(易失)— 适合测试
try (SqliteDb mem = SqliteDb.openMemory())
{
mem.exec("CREATE TABLE t(id INTEGER PRIMARY KEY, v TEXT)");
// ... 仅在 'mem' 打开期间存在 ...
}
}
}
下面的代码片段仅展示核心部分。要运行它,请将其放入上面的
MainWindow骨架中。
最小片段
// 已在源码核实:SqliteDb.open / openMemory / exec
import dev.crossfly.sqlite.*;
// 1) 文件型数据库(不存在则创建)
try (SqliteDb db = SqliteDb.open("app.db"))
{
db.exec(
"CREATE TABLE IF NOT EXISTS person(" +
" id INTEGER PRIMARY KEY," +
" name TEXT NOT NULL," +
" age INTEGER)");
// ... 在此使用数据库 ...
}
// 离开 try 时连接已关闭
// 2) 内存型数据库(易失)— 适合测试
try (SqliteDb mem = SqliteDb.openMemory())
{
mem.exec("CREATE TABLE t(id INTEGER PRIMARY KEY, v TEXT)");
// ... 仅在 'mem' 打开期间存在 ...
}
深入了解
- SQLite 存储指南 · 开发指南
- 姊妹配方:参数化 CRUD · 加密数据库 · 在 paint 线程之外使用
这个页面有帮助吗?感谢你的反馈!