aardio 文档
aardio 范例:预处理命令
//预处理命令
import sqlite
//创建测试数据库
var db = sqlite("/testParameters.db")
if( not db.existsTable("film") ){
db.exec( "CREATE TABLE film(title, length, year, starring);")
}
/*
下面 SQL 语句中用@表示的命名参数 - 这是 sqlite 提供的原生参数化,
由 cmd.bind.parameterAtNames 函数绑定参数,这种命名参数
不支持由 sqlite.format 函数参数化查询中的数组、针对一个命名参数的名值对参数化等功能。
如果sqlConnection.prepare() 函数的第2个参数是一个数组,
则调用 sqlite.format 格式化 SQL 语句中的 ?? 参数(不格式化 ? 或 @ 参数)
如果 db.prepare() 函数的第2个参数表包含名值对成员,
则这些名值对被自动创建为 WHERE 条件语句( 等价于格式化 SQL 语句中的 "WHERE ??")
*/
var cmd = db.prepare("INSERT INTO film VALUES (@title,@length,@year, 'Jodie Foster');" )
//绑定命名参数并执行一次预处理命令
cmd.step(
title = "标题11111";
length = 4;
year = time.now();
)
//上面的代码等价于下面的代码
cmd.reset();
cmd.bind.parameterAtNames(
["title"] = "标题";
["length"] = 4;
["year"] = time.now();
);
cmd.step();
/*
aardio 中的 string 类型字符串存为 sqlite 的 text 类型(UTF-8文本),
aardio 中的 buffer 类型字节数组存为 sqlite 的 blob 类型。
可在预处理语句的命名参数名中使用 blob,utf8,utf16 前缀指定字符串值的编码、或数据类型。
*/
cmd.prepare("INSERT INTO film VALUES (@blobTitle,@length,@year,'Jodie Foster');" );
//注意上面我们用 cmd.prepare() 更新了预处理命令对象的 SQL 语句。
//预处理 SQL 语句里的问号表示匿名参数( 不要和 sqlite.format 的数组参数混淆 )
cmd.prepare("INSERT INTO film VALUES (?,?, ?, 'Jodie Foster');" )
//按参数顺序绑定多个参数
cmd.step( {
'用 string.loadBuffer() 读入二进制字符\0串', //设定第一个?号表示的参数
null, //设定第二个?号表示的参数
time.now() //设定第三个?号表示的参数
})
//上面的代码等价于下面的代码
cmd.reset();
cmd.bind.blob('用 string.loadBuffer() 读入二进制字符\0串');
cmd.bind.double(123,2/*参数二*/ );
cmd.bind.text( tostring( time.now() ),3/*参数三*/ );
cmd.step();
//释放预处理命令对象
cmd.finalize();
//迭代方式查询数据
import console;
for title, length, year, starring in db.each("SELECT * FROM film") {
console.log( title, length, year, starring )
}
//删除表
db.exec("DROP TABLE film" );
execute("pause")
Markdown 格式