node-sqlite3
1.1、node-sqlite3包简介
是什么 ?:a Node.js driver for SQLite
开发语言:Node.js
源码仓库:https://github.com/mapbox/node-sqlite3
1.2、通过包管理器安装node-sqlite3
包管理器安装命令
npmnpm install sqlite3 --save
yarnyarn add sqlite3
1.3、导入node-sqlite3模块
let sqlite3 = require('sqlite3');
1.4、var sqlite3 = sqlite3.verbose(); 

发生错误时,会打印出异常链

注意:不要使用在生产环境。毕竟会带来性能损失。

示例

let sqlite3 = require('sqlite3').verbose();
1.5、var db = new sqlite3.Database(String dbFilePath, [Number mode], [function callback(error)]); 

获得一个数据库对象,并自动连接到该数据库。

dbFilePath说明
":memory:"表示创建匿名的存储在内存中的数据库,关闭数据库后,数据会丢失
""表示创建匿名的存储在磁盘中的数据库,关闭数据库后,数据会丢失
文件路径正常的数据库文件

mode可以是sqlite3.OPEN_READONLYsqlite3.OPEN_READWRITEsqlite3.OPEN_CREATE,默认是OPEN_READWRITE | OPEN_CREATE

如果传入了callback,那么执行失败时,error不为null,执行成功时,errornull

如果没有传入callback,那么执行失败时,会发射一个error事件给db对象;执行成功时,会发射一个open事件给db对象。

示例

let db = new sqlite3.Database('xx.db');
let db = new sqlite3.Database('');
let db = new sqlite3.Database(':memory:');

db.on('error', function(error) {
    console.log(error);
});
db.on('open', function() {
    console.log('opened');
});
1.6、var db = new sqlite3.cached.Database(String dbFilePath, [Number mode], [function callback(error)]); 

如果每次操作都是先创建一个连接,然后执行SQL,最后关闭连接。 那么这样对于高响应是不利的,因为频繁的创建和销毁连接也是要消耗时间和资源的, 所以,就像线程一样,我们也可以把连接缓存下来,放到一个池子里,这个池子就叫做数据库连接池。 有了这个池子,我们就不用每次都打开和关闭连接了,用的时候直接从池子里拿一个空闲的连接去执行SQL就行了。 这样大大提高了执行效率。

示例

let db = new sqlite3.cached.Database('xx.db');
let db = new sqlite3.cached.Database('');
let db = new sqlite3.cached.Database(':memory:');

db.on('error', function(error) {
    console.log(error);
});
db.on('open', function() {
    console.log('opened');
});
1.7、var db = db.exec(String sql, [function callback(error)]); 

执行sql,可以一次执行多条语句。

注意:该函数只回掉成功失败的状态,不回掉查询数据,所以,用它来执行SELECT语句想要获得查询结果是无法做到的。

示例

db.exec('SELECT 1', function(error) {
    if (error) throw error;
    //do somthing
});

SELECT 1用于测试数据库是否连接成功。并不是查询表。

1.8、var db = db.run(String sql, [Array params], [function callback(error)]); 

执行带有?占位符的sql,可以一次执行多条语句。

注意:该函数只回掉成功失败的状态,不回掉查询数据,所以,用它来执行SELECT语句想要获得查询结果是无法做到的。

示例

db.run('INSERT INTO [t_user] (name, age, gender) VALUES(?,?,?)', ['fpliu', 18, 'F'], function(error) {
    if (error) throw error;
    //do somthing
});
1.9、var db = db.get(String sql, [Array params], [function callback(error, row)]); 

执行带有?占位符的sql,可以一次执行多条语句。

注意:该函数不仅回掉成功失败的状态,还回掉结果集中的第一行数据,如果没有任何行,rowundefined

示例

db.run('SELECT name, age, gender FROM [t_user]', [], function(error, row) {
    if (error) throw error;
    //do somthing
});
1.10、var db = db.all(String sql, [Array params], [function callback(error, rows)]); 

执行带有?占位符的sql,可以一次执行多条语句。

注意:该函数不仅回掉成功失败的状态,还回掉结果集rows是数组,它可能会是length = 0

示例

db.run('SELEC name, age, gender FROM [t_user]', [], function(error, rows) {
    if (error) throw error;
    //do somthing
});
1.11、var db = db.each(String sql, [Array params], [function callback(error, row)], [function complete_callback()]); 

执行带有?占位符的sql,可以一次执行多条语句。

注意:该函数不仅回掉成功失败的状态,还回掉结果集中的每一行数据,complete_callback是完成的回掉。

示例

db.each('SELECT name, age, gender FROM [t_user]', [], function(error, row) {
    if (error) throw error;
    //do somthing
}, function() {
    //do somthing
});
1.12、var db = db.close([function callback(error)]); 

关闭数据库连接。

当没有传入callback的时候,会发射一个close事件给db对象。

示例

db.close(function(error) {
    if (error) throw error;
    //do somthing
});
db.on('close', function(error) {
    if (error) throw error;
    //do somthing
});
db.close();
1.13、var db = db.on(['trace', function callback(sql)]); 

跟踪到底执行了哪些sql语句。可以用来记录日志。

示例

db.on('trace', function(sql) {
    console.log(sql);
});
1.14、var db = db.on(['profile', function callback(sql, milliseconds)]); 

性能统计。统计sql语句大约执行了多少毫秒

示例

db.on('profile', function(sql, milliseconds) {
    console.log(sql, milliseconds);
});