db.serialize(function() {
// 这里执行的命令是串行的
});
// 这里执行的命令是串行的
});
// 这里执行的命令是并行的
并行执行模式
Database#parallelize([callback])如果提供回调,它将立即被调用,即此方法的回调不是异步回调。在该回调中调度的所有数据库语句将并行运行。函数返回后,数据库将再次设置为其原始模式。
db.serialize(function() {
// 这里执行的命令是串行的
db.parallelize(function() {
// 这里执行的命令是并行的
});
// 这里执行的命令是串行的
});预编译SQL相关api
在java的jdbc中,有个PreparedStatement相关的api,可以预编译sql语句,执行的时候再链接具体参数。这样的好处是可以减少sql语句被编译的次数。在sqlite3中,也存在实现这样功能的api。
Database#prepare(sql, [param, ...], [callback])Database#prepare执行后,会返回一个命令对象,这个命令对象可以反复执行。下面看看这个命令对象(statement )的api:
Statement#run([param, ...], [callback])
Statement#get([param, ...], [callback])
Statement#all([param, ...], [callback])
Statement#each([param, ...], [callback])以上api方法与Database的同名方法调用方式相同。不同点是这里的Statement对象是可以复用的,避免了重复编译sql语句,因此项目中更推荐使用上述方法。
! 注意,这些方法的param参数都会对Statement对象绑定参数,在下一次执行的时候,如果没有重新绑定参数,是会使用上一次参数的。
绑定参数
Statement#bind([param, ...], [callback])Database#prepare执行的时候,是可以绑定参数的。不过使用此方法可以全重置语句对象和行游标,并删除所有先前绑定的参数,实现重新绑定的功能。
重置语句的行游标
Statement#reset([callback])重置语句的行游标,并保留参数绑定。使用此功能可以使用相同的绑定重新执行相同的查询。
数据库事务
事务是关系型数据库中的一个重要部分,sqlite自然也是支持事务的,但是sqlite3并没有提供特殊API去实现的事务相关的操作,只能靠SQL语句去控制事务。这里举一个事务相关的例子。
var db = new sqlite3.Database(db_path);
db.run("CREATE TABLE foo (id INT, txt TEXT)");
db.run("BEGIN TRANSACTION");
var stmt = db.prepare("INSERT INTO foo VALUES(?, ?)");









