aardio 文档
aardio 范例: sqlite 库 - 增删改查
预处理命令参数绑定规则 | 规则
//sqlite 库 - 增删改查
import sqlite
import console;
var db = sqlite("/test-sqlite.db"); //创建数据库
if( not db.existsTable("film") ){
db.exec( "CREATE TABLE [film](title, length, year, starring);"); //创建表
}
//增 - 使用预处理命令执行参数化查询,SQL 中用 @ 前缀指定命名参数,单个 ? 指定匿名数组
var cmd = db.prepare("REPLACE INTO film VALUES (@title,@length,@year, 'Jodie Foster');" )
/*
参数表中的名值对绑定为命名参数值。
数组成员绑定为匿名参数值。
预处理命令参数绑定规则: https://www.aardio.com/zh-cn/docs/examples/Database/sqlite/prepare.html
绑定值为 time 对象则转为标准格式时间字符串。
绑定值为定义 _tostring 元方法的表使用 tostring 方法转为字符串。
绑定值为未定义 _tostring 元方法的结构体自动转为 buffer 存储(读取时请使用 raw.convert 还原)。
其他普通表以二进制模式序列化存储,读取时自动还原为表对象
*/
cmd.step({
title = "标题";
length = 4;
year = time.now();
})
//删 - 执行SQL语句,支持参数化 SQL,支持数组参数
db.exec("DELETE FROM ?? WHERE title=?;",{ "film","要删除的标题"} )
//改 - exec 函数也可以用一个表参数指定 SQL 命名参数
db.exec("UPDATE film SET title = @title,length=@length WHERE title = @oldTitle;",{
title = "新的标题";
length = #"新的标题";
oldTitle = "标题";
} );
//查 - 内部创建预处理命令执行参数化查询,返回首行数据
var result = db.stepQuery("SELECT * FROM [film] WHERE title=@title"
/*
如果 SQL 中存在 @ 前缀的命名参数,或者参数 @2 是数组或包含数组成员。
则创建创建预处理命令并绑定参数 @2 指定的表对象内对应的值(匿名参数绑定为数组元素的值)。
如果 SQL 语句中包含 '??' ,则改用 sqlite.format 格式化 ?? 与 ? 占位符。
规则: https://www.aardio.com/zh-cn/docs/examples/Database/sqlite/sqlite.format.html
*/
,{
title = "新的标题"
}
)
/*
//查 - 返回首行数据,使用 sqlite.format 格式化匿名参数。
var result = db.stepQuery("SELECT * FROM [film] WHERE ??"
,[
{ title = "新的标题"} //格式化为 WHERE 条件,数组成员格式化为 IN 子句
]
)
*/
//查 - 返回首行数据
var result = db.stepQuery("SELECT * FROM [film]"
/*
这是上面写法的简化,
SQL 省略了 WHERE ?? 或 AND ??
参数 @2 指定第一个匿名参数的值(而不是放到数组中)。
内部仍然调用 sqlite.format 格式化。
*/
,{ title = "新的标题"}
)
/*
注意: db 的 stepQuery,stepResult,each,gettable 方法的参数用法遵守相同规则。
*/
//查 - 遍历查询结果
for rowid,title, length, year, starring in db.each("SELECT rowid,* FROM film") {
/*
for 语句的第一个返回值如果为 null 就会退出循环,
如果数据库返回的第一个字段可能为空,那么可以把 SQLite 默认就有的索引字段 rowid 放在最前面
*/
console.log( rowid,title, length, year, starring )
}
//删除表
db.exec("DROP TABLE film" );
console.pause();
Markdown 格式