数据库(Database)
Database 表示一次 具体的数据库访问上下文。
它是 SQLite API 中的核心对象,所有 SQL 执行、数据查询、Schema 读取、事务与保存点操作,最终都通过 Database 完成。
在 Scripting 中,Database 不会被直接创建,而是由 DatabaseQueue 或 DatabasePool 在 read / write 回调中提供。
类型定义
Database 的角色与边界
Database 的职责包括:
- 执行 SQL(DDL / DML)
- 创建与管理 Statement
- 查询和读取数据
- 提供 Schema 元信息
- 管理事务和保存点
但它 不负责:
- 并发调度(由 Queue / Pool 负责)
- 生命周期管理(由 Queue / Pool 控制)
- 跨线程或跨回调复用
Database 的获取方式
Database 只能在 DatabaseQueue 或 DatabasePool 的回调中使用:
状态属性
changesCount
返回 最近一次 SQL 操作 影响的行数。
totalChangesCount
返回自数据库连接建立以来 累计影响的行数。
isInsideTransaction
指示当前是否处于事务或保存点中。
lastErrorMessage
返回最近一次 SQLite 错误信息(若有)。
lastInsertedRowID
返回最近一次插入操作生成的 RowID。
Schema 版本
schemaVersion
返回数据库当前的 schema 版本。
常用于迁移逻辑:
Schema 查询 API
tableExists
判断表是否存在。
isTableHasUniqueKeys
判断表是否具有指定的唯一键组合。
columnsIn
查询表中所有列的信息。
primaryKey / foreignKeys / indexes
获取主键、外键与索引信息。
Statement 创建
makeStatement
创建一个新的 Statement。
cachedStatement
创建或获取一个缓存的 Statement。
事务与保存点
inTransaction
在事务中执行一组操作。
inSavepoint
在保存点中执行操作,支持嵌套。
说明:
- 返回
"commit"提交 - 返回
"rollback"回滚 - 抛出异常将自动回滚
执行 SQL
execute
执行任意 SQL(不返回结果)。
适合:
- DDL
- INSERT / UPDATE / DELETE
- 不关心返回结果的语句
表与索引管理
createTable
使用结构化方式创建表。
renameTable / dropTable
createIndex
dropIndex / dropIndexOn
数据查询 API
fetchAll
返回所有结果行。
fetchSet
以 Set 形式返回结果(自动去重)。
fetchOne
返回单条结果。
fetchCursor
使用游标逐条读取结果。
适合:
- 大数据量查询
- 流式处理
- 避免一次性加载全部数据
使用约束与注意事项
Database只能在其所属的read / write回调中使用- 不可跨回调保存或传递 Database 实例
- 不可跨线程使用
- 事务必须在同一个 Database 上完成
常见误用
- 在回调外部持有 Database 引用
- 在事务外执行依赖事务状态的逻辑
- 对一次性查询过度使用
fetchCursor - 混用 Queue / Pool 的并发语义
总结
Database 是 SQLite API 的核心执行单元:
- 提供完整的 SQL 执行与查询能力
- 管理 Statement、事务和 Schema
- 明确并发和生命周期边界
- 与 Queue / Pool 形成清晰分工
