扩展类(不是扁平命令库)。路径:支持库 → 扩展支持库 → SQLite类。类型名必须写 SQLite类。
高阶方法尽量不手写 SQL;需要时用 执行SQL / 查询SQL。
快速开始
函数 主窗口.创建完毕 () {
SQLite类 db
如果真 (db.打开 ("demo.db") == 假) {
输出 (db.取错误 ())
返回
}
字段信息 cols[3]
cols[1].名称 = "id"
cols[1].类型 = #主键
cols[2].名称 = "姓名"
cols[2].类型 = #文本
cols[3].名称 = "年龄"
cols[3].类型 = #整数
db.建表 ("人", cols)
db.插入 ("人", "姓名,年龄", "张三,20")
db.查询 ("人", "年龄=20")
当 (db.取下一行 ()) {
输出 (db.取文本 ("姓名") + " " + 到文本 (db.取整数 ("年龄")))
}
db.关闭 ()
}
字段信息与类型常量
内置类型 字段信息(无需自建 .yt),可声明数组:
| 成员 | 类型 | 说明 |
|---|---|---|
名称 |
文本 | 列名 |
类型 |
整数 | 用 #文本 / #整数 / #小数 / #逻辑 / #二进制 / #主键(成员名「类型」可用,虽与关键字同字) |
主键 |
逻辑 | 真=主键;与 #整数 组合时为自增 |
非空 |
逻辑 | NOT NULL |
默认值 |
文本 | 可选默认值 |
| 常量 | 值 | SQLite |
|---|---|---|
#文本 |
1 | TEXT |
#整数 |
2 | INTEGER |
#小数 |
3 | REAL |
#逻辑 |
4 | INTEGER(0/1) |
#二进制 |
5 | BLOB |
#主键 |
6 | INTEGER PRIMARY KEY AUTOINCREMENT |
兼容旧写法:db.建表("人", "id:主键,姓名:文本,年龄:整数")(第二参数为文本时仍走 CSV 列定义)。
条件风格(查询 / 更新 / 删除 / 取行数)
条件为 「列运算符值」 文本,或 文本数组(多条件 AND)。值一律按文本传入,内部绑定;数值列由 SQLite 亲和性转换。
db.查询 ("user", "id=1")
db.查询 ("user", ["id=1", "age=20"])
db.查询 ("user", "部门ID=2", "姓名,年龄", "年龄 DESC", 10)
db.更新 ("user", "年龄=21", "姓名=张三")
db.更新 ("user", ["年龄=21", "分数=90"], ["姓名=张三"])
db.删除 ("user", "姓名=张三")
db.取行数 ("user", "在职=1")
支持运算符:= <> != > >= < <= 以及 LIKE(如 姓名 LIKE 张%)。
可选增强参数(仅 查询):
- 列名:CSV,空=
* - 排序:如
年龄 DESC - 限制行数:
<=0表示不限制
打开与密码
db.打开 ("data.db")
db.打开 ("data.db", 真) // 只读
db.打开 ("secret.db", 假, "mypass") // 整库 AES 加密
db.保存 () // 加密会话可立即落盘;关闭() 也会保存
密码非空时:库在内存中操作,关闭/保存时用 AES(与 ZIP 同源)写成带魔数 YPLDB01 的加密文件。
无密码打开加密文件会失败;密码错误会失败。明文 SQLite 文件带密码打开时,会迁入内存并在关闭时改写为加密格式。
这不是 SQLCipher 页级加密;大库会整库载入内存。敏感列仍可用字段级 RC4加密。
字段级加密(可选)
用基础库 加密解密:RC4加密 / XOR加密 / Base64编码 等,写入前加密、读出后解密。
取文本跨行
文本 姓名 = db.取文本("姓名") 在随后的 取下一行() 后仍有效(运行时会拷贝;赋值侧也会对调用结果 ToTextText)。
常用方法
| 方法 | 说明 |
|---|---|
打开(路径, [只读], [密码]) / 关闭 / 是否打开 / 保存 |
连接;密码=整库 AES |
建表(表, 字段信息[]) / 删表 / 清空表 / 表是否存在 |
结构 |
插入(表, 列CSV, 值CSV) / 插入批量(表, 列CSV, 值行[]) |
无 SQL 插入 |
更新(表, 置值, [条件]) |
置值/条件:文本或文本数组 |
删除(表, 条件) |
条件必填 |
查询 + 取下一行 + 取文本/整数/小数 |
无 SQL 查询游标 |
取行数(表, [条件]) |
COUNT |
执行SQL / 查询SQL |
原生 SQL |
开始事务 / 提交 / 回滚 |
事务 |
取错误 / 取最后插入ID / 取影响行数 |
诊断 |
原生 SQL 示例
db.执行SQL ("CREATE INDEX IF NOT EXISTS idx_age ON 人(年龄)")
db.查询SQL ("SELECT 姓名 FROM 人 WHERE 年龄>=18")