new sqlite3.Database(filename [, mode] [, callback])
描述:
返回新的数据库对象并自动打开数据库。没有单独的方法来打开数据库。
参数:
-
filename:
有效值为文件名,":memory:"表示匿名内存数据库,空字符串表示匿名磁盘数据库。匿名数据库不会持久化,当关闭数据库句柄时,其内容将丢失。 -
mode(可选):
可选一个或多个,值可为:sqlite3.OPEN_READWRITE, sqlite3.OPEN_CREATE, sqlite3.OPEN_FULLMUTEX, sqlite3.OPEN_URI, sqlite3.OPEN_SHAREDCACHE, sqlite3.OPEN_PRIVATECACHE.
默认值为OPEN_READWRITE | OPEN_CREATE | OPEN_FULLMUTEX -
callback (可选):
如果提供了该函数,则将在成功打开数据库或发生错误时调用该函数。第一个参数是一个错误对象。当它为空时,表示打开成功。如果没有提供回调,并且发生了错误,则会在数据库对象上发出错误事件,其中error对象是唯一的参数。如果打开成功,则触发一个不带参数的打开事件,而不管是否提供了回调。
sqlite3.verbose()
描述:
将执行模式设置为verbose以产生较长的堆栈跟踪。这是无法重置的。有关详细信息,请参阅有关调试的wiki页面。
Database
close([callback])
描述:
关闭数据库
参数:
- callback(可选):
如果提供,该函数将在数据库成功关闭或发生错误时调用。第一个参数是一个错误对象。当它为null时,关闭成功。如果没有提供回调,并且发生了错误,则会在数据库对象上发出错误事件,其中error对象是唯一的参数。如果关闭成功,则触发一个不带参数的close事件,而不管是否提供了回调。
configure(option, value)
描述:
为数据库设置一个配置选项。有效的选项是:
-
Tracing & profiling
trace:提供一个回调函数作为值。在SQL语句执行时调用,并呈现语句文本。
profile:配置文件:提供一个函数回调。每次执行SQL语句时调用。 -
busyTimeout: 提供一个整数作为值。设置忙时超时。
run(sql [, param, …] [, callback])
描述:
使用指定的参数运行SQL查询,然后调用回调。它不检索任何结果数据。函数返回调用它的Database对象以允许函数链接
参数:
- sql:
要运行的SQL查询。如果SQL查询无效,并且将回调传递给函数,则使用包含来自SQLite的错误消息的错误对象调用该函数。如果没有传递回调而准备失败,则会在底层Statement对象上触发一个错误事件。 - param, …(可选):
当SQL语句包含占位符时,您可以将它们传递到这里。它们将在语句执行之前绑定到该语句。有三种方式传递绑定形参:直接在函数的实参中传递,作为数组传递,以及作为命名形参的对象传递。这将自动清除输入RE: issue #57。参数不能用于列名或表名。
如果你想保持回调作为第3个参数,你应该设置param为“[]”(空数组)根据问题#116
// 直接在函数参数中
db.run("UPDATE tbl SET name = ? WHERE id = ?", "bar", 2);
// 为一个数组
db.run("UPDATE tbl SET name = ? WHERE id = ?", [ "bar", 2 ]);
// 为具有命名参数的对象
db.run("UPDATE tbl SET name = $name WHERE id = $id", {
$id: 2,
$name: "bar"
});
命名参数可以用: name
、 @name
和 $name
作为前缀。我们建议使用$name
,因为JavaScript允许使用美元符号作为变量名而不必转义。还可以在?占位符。这些对应于数组中的位置。注意,占位符索引在SQLite中从1开始。node-sqlite3将数组映射为以1开头的数组,这样您就不必指定一个空值作为第一个数组元素(索引为0)。注意,在本例中,第一个索引是1:
db.run('UPDATE tbl SET name = ?5 WHERE id = ?', {
1: 2,
5: 'bar'
})
这将第一个占位符( $id )绑定到 2,索引为 5 的占位符绑定到"bar"。虽然这在SQLite和node-sqlite3中是有效的,但不建议混合使用不同的占位符类型。
如果使用数组或对象绑定形参,则它必须是绑定实参列表中的第一个值。如果在它之前有其他对象,则会抛出错误。数组或对象后面的附加绑定参数将被忽略。
- callback(可选):
如果给定了callback,则在语句准备或执行的任何步骤中发生错误时,或在查询运行后调用它。如果发生错误,第一个(也是唯一的)参数将是一个包含错误消息的错误对象。如果执行成功,第一个参数为null。函数的上下文(函数中的this对象)是语句对象。注意,不可能再次运行该语句,因为它在第一次运行后会自动完成。任何后续再次运行该语句的尝试都将失败。
如果执行成功,this 对象将包含两个属性lastID和changes,分别包含最后插入的行ID的值和受此查询影响的行数。注意:
-
你必须使用旧版的**function () { … }**样式的回调函数,而不是lambda函数,否则 this.lastID 和 this.changes 将undefined
-
lastID仅在查询是一个成功完成的 INSERT 语句时包含有效信息,changes仅在查询是一个成功完成的UPDATE或DELETE语句时包含有效信息。在所有其他情况下,这些属性的内容是不准确的,不应该使用。.run()函数是唯一设置这两个值的查询方法;所有其他查询方法,如.all()或.get(),都不会检索这些值。
get(sql [, param, …] [, callback])
描述:
使用指定的参数运行SQL查询,然后使用所有结果行调用回调。函数返回Database对象以允许函数链接。参数与 Database#run函数相同,不同之处在于:
回调函数的签名是function(err, row){}。如果结果集为空,则第二个参数undefined,否则它是一个包含第一行值的对象。属性名与结果集的列名对应。不可能通过列索引访问它们;唯一支持的方式是通过列名。
all(sql [, param, …] [, callback])
描述:
使用指定的参数运行SQL查询,然后使用所有结果行调用回调。函数返回Database对象以允许函数链接。参数与Database#run函数相同,不同之处在于:
回调函数的签名是function(err, rows){}。rows 是一个数组。如果结果集为空,则它将是一个空数组,否则它将为每个结果行提供一个对象,该对象依次包含该行的值,如Database#get函数。
注意,它首先检索所有结果行并将它们存储在内存中。对于可能具有较大结果集的查询,使用Database#each函数检索所有行,或使用Database#prepare后跟多个Statement#get调用检索先前未知数量的行。
each(sql [, param, …] [, callback] [, complete])
描述:
使用指定的参数运行SQL查询,并对每个结果行调用一次回调。函数返回Database对象以允许函数链接。参数与Database#run函数相同,不同之处在于:
回调函数的签名是function(err, row){}。如果结果集成功但为空,则永远不会调用回调函数。在所有其他情况下,对检索到的每一行调用一次回调。调用的顺序与结果集中的行顺序完全一致。
在调用所有行回调之后,如果存在,则将调用完成回调。第一个参数是一个错误对象,第二个参数是检索的行数。如果你只指定一个函数,它将被视为行回调,如果你指定了两个,第一个(==倒数第二个)函数将是行回调,最后一个函数将是完成回调。
如果您知道查询只返回非常有限的行数,那么使用Database#all一次性检索所有行可能会更方便。
目前没有办法中止执行。
exec(sql [, callback])
描述:
运行提供的字符串中的所有SQL查询。未检索任何结果行。该函数返回Database对象以允许函数链接。如果查询失败,则不会执行任何后续语句(如果希望执行所有语句或不执行任何语句,请将其包装在事务中)。当所有语句都已成功执行时,或发生错误时,将调用回调函数,第一个参数为null或错误对象。当未提供回调且发生错误时,将在数据库对象上发出error 事件。
注意:这个函数只执行第一个NULL字节以内的语句。
prepare(sql [, param, …] [, callback])
描述:
准备SQL语句,并可选地绑定指定的参数,并在完成时调用回调。该函数返回一个Statement对象。
当准备成功时,回调函数的第一个也是唯一的参数为null,否则为error对象。当提供了绑定参数时,在调用回调之前将它们绑定到准备好的语句。
map(sql [, callback])
描述:
**Statement#map.**的快捷方式
loadExtension(path [, callback])
描述:
将编译后的SQLite扩展加载到数据库连接对象中。
参数:
- path:
要加载的扩展名的文件名。 - callback(可选):
如果提供了该函数,则在成功加载扩展或发生错误时将调用该函数。第一个参数是一个错误对象。当它为空时,加载成功。如果没有提供回调,并且发生了错误,则会在数据库对象上发出错误事件,其中error对象是唯一的参数。
注意:请确保您加载的扩展被编译或链接到与node-sqlite3被编译的版本相同的版本。版本不匹配会导致不可预测的行为。
建立一个扩展
half: SQLite文档给出了一个用户定义函数"half"的示例,该函数接受一个数字并返回一个结果(数字除以2):http://www.sqlite.org/cvstrac/wiki?p=LoadableExtensions
rank:一个来自全文搜索文档的现成示例https://github.com/coolaj86/sqlite3-fts4-rank
另请参阅:http://www.mail-archive.com/sqlite-users@sqlite.org/msg71740.html
interrupt()
描述:
允许用户中断长时间运行的查询。包装sqlite3_interrupt并导致其他数据获取函数传递一个带有code = sqlite3.INTERRUPT的错误。必须打开数据库才能使用此功能。
Statement
bind([param, …] [, callback])
描述:
将参数绑定到准备好的语句,并在完成或发生错误时调用回调。函数返回Statement对象以允许函数链接。当绑定成功时,回调函数的第一个也是唯一一个参数为null,否则为error对象。
与此函数绑定参数将完全重置语句对象和行游标,并删除所有以前绑定的参数(如果有的话)。
reset([callback])
描述:
重置语句的行游标并保留参数绑定。使用此函数可以使用相同的绑定重新执行相同的查询。函数返回Statement对象以允许函数链接。该回调函数将在重置完成后调用。这个操作永远不会失败,并且总是返回null作为第一个也是唯一的回调参数。
finalize([callback])
描述:
使结束声明。
这通常是可选的,但如果在执行下一个查询之前遇到长时间的延迟,则可能需要显式地结束语句。在运行独占查询时可能会出现这种情况(请参阅控制流一节)。语句结束后,对该语句对象的所有进一步函数调用都将抛出错误。
run([param, …] [, callback])
描述:
绑定参数并执行语句。函数返回Statement对象以允许函数链接。
如果指定了绑定参数,它们将在执行语句之前绑定到语句。注意,即使指定单个绑定参数,也会重置绑定和行游标。
回调行为与Database#run方法相同,不同之处在于语句在运行后不会结束。这意味着您可以多次运行它。
get([param, …] [, callback])
描述:
绑定参数,执行语句并检索第一个结果行。函数返回Statement对象以允许函数链接。参数与Statement#run函数相同,不同之处在于:
回调函数的签名是function(err, row){}。如果结果集为空,则第二个参数未定义,否则它是一个包含第一行值的对象。与Statement#run类似,语句在执行此函数后不会最终完成。
使用此方法会使数据库处于锁定状态,因为数据库将等待对Statement#get的进一步调用以检索后续行。要通知数据库您已完成检索行,您应该完成(使用Statement#finalize)或重置(使用Statement#reset)语句
all([param, …] [, callback])
描述:
绑定参数,执行语句并使用所有结果行调用回调。函数返回Statement对象以允许函数链接。参数与Statement#run函数相同,不同之处在于:
回调函数的签名是function(err, rows){}。如果结果集为空,则第二个参数为空数组,否则它为每个结果行包含一个对象,该对象又包含该行的值。与Statement#run类似,语句在执行此函数后不会最终完成。
each([param, …] [, callback] [, complete])
描述:
绑定参数,执行语句并为每个结果行调用回调。函数返回Statement对象以允许函数链接。参数与Statement#run函数相同,不同之处在于:
回调函数的签名是function(err, row){}。如果结果集成功但为空,则永远不会调用回调函数。在所有其他情况下,对检索到的每一行调用一次回调。调用的顺序与结果集中的行顺序完全一致。
在调用所有行回调之后,如果存在,则将调用完成回调。第一个参数是一个错误对象,第二个参数是检索的行数。如果你只指定一个函数,它将被视为行回调,如果你指定了两个,第一个(==倒数第二个)函数将是行回调,最后一个函数将是完成回调。
与Statement#run类似,语句在执行此函数后不会最终完成。
如果您知道查询只返回非常有限的行数,那么使用Statement#all一次性检索所有行可能会更方便。
目前没有办法中止执行!
map(sql [, callback])
描述:
将结果作为对象而不是数组返回。