Qt 中使用 SQLite 数据库

发布于:2025-07-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、SQLite 数据库介绍

SQLite 是一个轻量级的嵌入式关系型数据库管理系统,它以库的形式提供,不需要单独的服务器进程,直接访问存储在普通磁盘文件中的数据库。

主要特性

  1. 无服务器架构:SQLite 不需要单独的服务器进程

  2. 零配置:无需安装或管理

  3. 跨平台:支持所有主流操作系统

  4. 事务性:完全兼容 ACID (原子性、一致性、隔离性、持久性)

  5. 自包含:单个磁盘文件包含整个数据库

  6. 小型轻量:完整的库只有几百KB大小

  7. 公共领域:完全开源,无版权限制

数据类型

SQLite 使用动态类型系统,主要有以下存储类:

类型 描述
NULL 表示空值
INTEGER 带符号整数,根据值大小以1、2、3、4、6或8字节存储
REAL 浮点数,8字节IEEE浮点数
TEXT 文本字符串,使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储
BLOB 二进制大对象,完全按照输入存储

类型亲和性(Type Affinity)

SQLite 支持"类型亲和性"概念,即列优先以某种特定类型存储数据。以下是五种类型亲和性:

TEXT

  • 声明包含:TEXTVARCHARCHARCLOB 等

  • 将所有数据转换为文本格式存储

NUMERIC

  • 声明包含:NUMERICDECIMALBOOLEANDATEDATETIME 等

  • 尝试转换为INTEGER或REAL,不行则存为TEXT

INTEGER

  • 声明包含:INTEGERINTTINYINTSMALLINTMEDIUMINTBIGINT 等

  • 行为类似NUMERIC,但无小数部分

REAL

  • 声明包含:REALDOUBLEFLOAT 等

  • 转换为REAL格式存储

BLOB

  • 声明包含:BLOB, 或未指定类型

  • 不转换,直接存储输入数据

常见数据类型映射

虽然SQLite内部只有5种存储类别,但为了兼容其他SQL数据库,支持以下类型声明:

声明的类型 实际亲和性 存储形式示例
INTEGER, INT INTEGER 1, -234, 123456789012345
REAL, FLOAT REAL 3.14, -123.456, 1.23e+10
TEXT, VARCHAR TEXT 'Hello', '2023-01-01'
BLOB BLOB x'53514C697465' (十六进制)
DATE, DATETIME NUMERIC '2023-05-20', '2023-05-20 12:34'
BOOLEAN NUMERIC 0 (false), 1 (true)

常用属性

SQLite 提供了一系列属性和编译时选项(Pragma)来控制和查询数据库的行为。以下是常用的 SQLite 属性:

数据库配置属性(PRAGMA)

数据库设置
  1. journal_mode

    • 设置事务日志模式

    • 可选值:DELETE(默认), TRUNCATE, PERSIST, MEMORY, WAL, OFF

    • 示例:PRAGMA journal_mode=WAL; (启用Write-Ahead Logging模式)

  2. synchronous

    • 控制同步写入磁盘的级别

    • 可选值:0(OFF), 1(NORMAL), 2(FULL-默认)

    • 示例:PRAGMA synchronous=1;

  3. temp_store

    • 控制临时表的存储方式

    • 可选值:0(DEFAULT), 1(FILE), 2(MEMORY)

    • 示例:PRAGMA temp_store=2; (内存存储临时表)

  4. encoding

    • 数据库编码

    • 可选值:UTF-8, UTF-16, UTF-16le, UTF-16be

    • 示例:PRAGMA encoding="UTF-8";

查询设置
  1. cache_size

    • 设置内存缓存页数

    • 示例:PRAGMA cache_size=2000; (约2MB缓存)

  2. page_size

    • 设置数据库页面大小(创建数据库前设置)

    • 示例:PRAGMA page_size=4096;

  3. foreign_keys

    • 启用/禁用外键约束

    • 可选值:0(OFF), 1(ON)

    • 示例:PRAGMA foreign_keys=ON;

  4. auto_vacuum

    • 控制自动清理空闲空间

    • 可选值:0(NONE), 1(FULL), 2(INCREMENTAL)

    • 示例:PRAGMA auto_vacuum=1;

信息查询
  1. database_list

    • 列出所有附加的数据库

    • 示例:PRAGMA database_list;

  2. table_info(table_name)

    • 获取表的列信息

    • 示例:PRAGMA table_info(users);

  3. index_list(table_name)

    • 获取表的索引列表

    • 示例:PRAGMA index_list(users);

  4. integrity_check

    • 检查数据库完整性

    • 示例:PRAGMA integrity_check;

  5. user_version
    用户自定义版本控制属性。

    查询当前 user_version

    sql

    PRAGMA user_version;

    这将返回一个整数值,初始值为 0。

    设置 user_version

    sql

    PRAGMA user_version = 版本号;

    例如:

    sql

    PRAGMA user_version = 1;

连接属性

在编程接口中可设置的常用连接属性:

  1. SQLITE_OPEN_READONLY - 只读模式打开

  2. SQLITE_OPEN_READWRITE - 读写模式打开

  3. SQLITE_OPEN_CREATE - 不存在时创建数据库

  4. SQLITE_OPEN_URI - 允许URI文件名

  5. SQLITE_OPEN_MEMORY - 内存数据库

  6. SQLITE_OPEN_NOMUTEX - 多线程无互斥

  7. SQLITE_OPEN_FULLMUTEX - 多线程完全互斥

版本信息属性

  1. sqlite_version() - 返回SQLite版本

    • 示例:SELECT sqlite_version();

  2. sqlite_source_id() - 返回SQLite源代码ID

    • 示例:SELECT sqlite_source_id();

系统状态属性

  1. changes() - 返回最近操作影响的行数

    • 示例:SELECT changes();

  2. total_changes() - 返回连接期间总更改数

    • 示例:SELECT total_changes();

  3. last_insert_rowid() - 返回最后插入的ROWID

    • 示例:SELECT last_insert_rowid();

常用 SQL 命令

数据库操作

sql

-- 创建数据库(文件不存在时自动创建)
sqlite3 database_name.db

表操作

sql

-- 创建表
CREATE TABLE table_name (
    column1 datatype PRIMARY KEY,
    column2 datatype NOT NULL,
    column3 datatype DEFAULT value,
    ...
);

-- 删除表
DROP TABLE table_name;

-- 修改表
ALTER TABLE table_name ADD COLUMN column_name datatype;

数据操作

sql

-- 插入数据
INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...);

-- 查询数据
SELECT column1, column2, ... FROM table_name 
WHERE condition 
ORDER BY column ASC|DESC 
LIMIT number;

-- 更新数据
UPDATE table_name 
SET column1 = value1, column2 = value2, ...
WHERE condition;

-- 删除数据
DELETE FROM table_name WHERE condition;

常用函数

SQLite 提供了丰富的内置函数来处理和转换数据,这些函数可以用于查询、计算和数据处理。以下是 SQLite 函数的分类详解和用法示例。

1. 核心函数

1.1 基本标量函数
函数 描述 示例
COALESCE(X,Y,...) 返回第一个非NULL参数 SELECT COALESCE(NULL, 'default') → 'default'
IFNULL(X,Y) 如果X为NULL则返回Y SELECT IFNULL(NULL, 'backup') → 'backup'
NULLIF(X,Y) X=Y时返回NULL,否则返回X SELECT NULLIF(5,5) → NULL
MAX(X,Y,...) 返回最大值 SELECT MAX(3,5,1) → 5
MIN(X,Y,...) 返回最小值 SELECT MIN(3,5,1) → 1
1.2 类型转换函数
函数 描述 示例

网站公告

今日签到

点亮在社区的每一天
去签到