是什么 ? | : | a Node.js driver for SQLite |
开发语言 | : | Node.js |
源码仓库 | : | https://github.com/mapbox/node-sqlite3 |
包管理器 | 安装命令 |
---|---|
npm | npm install sqlite3 --save |
yarn | yarn add sqlite3 |
let sqlite3 = require('sqlite3');
发生错误时,会打印出异常链
。
注意:不要使用在生产环境
。毕竟会带来性能损失。
示例:
let sqlite3 = require('sqlite3').verbose();
获得一个数据库对象,并自动连接到该数据库。
dbFilePath | 说明 |
---|---|
":memory:" | 表示创建匿名的存储在内存中的数据库,关闭数据库后,数据会丢失 |
"" | 表示创建匿名的存储在磁盘中的数据库,关闭数据库后,数据会丢失 |
文件路径 | 正常的数据库文件 |
mode
可以是sqlite3.OPEN_READONLY
、sqlite3.OPEN_READWRITE
、sqlite3.OPEN_CREATE
,默认是OPEN_READWRITE | OPEN_CREATE
如果传入了callback
,那么执行失败时,error
不为null
,执行成功时,error
为null
。
如果没有传入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');
});
如果每次操作都是先创建一个连接,然后执行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');
});
执行sql
,可以一次执行多条语句。
注意:该函数只回掉成功
或失败
的状态,不回掉查询数据,所以,用它来执行SELECT
语句想要获得查询结果是无法做到的。
示例:
db.exec('SELECT 1', function(error) {
if (error) throw error;
//do somthing
});
SELECT 1
用于测试数据库是否连接成功。并不是查询表。
执行带有?
占位符的sql
,可以一次执行多条语句。
注意:该函数只回掉成功
或失败
的状态,不回掉查询数据,所以,用它来执行SELECT
语句想要获得查询结果是无法做到的。
示例:
db.run('INSERT INTO [t_user] (name, age, gender) VALUES(?,?,?)', ['fpliu', 18, 'F'], function(error) {
if (error) throw error;
//do somthing
});
执行带有?
占位符的sql
,可以一次执行多条语句。
注意:该函数不仅回掉成功
或失败
的状态,还回掉结果集
中的第一行
数据,如果没有任何行,row
为undefined
。
示例:
db.run('SELECT name, age, gender FROM [t_user]', [], function(error, row) {
if (error) throw error;
//do somthing
});
执行带有?
占位符的sql
,可以一次执行多条语句。
注意:该函数不仅回掉成功
或失败
的状态,还回掉结果集
,rows
是数组,它可能会是length = 0
。
示例:
db.run('SELEC name, age, gender FROM [t_user]', [], function(error, rows) {
if (error) throw error;
//do somthing
});
执行带有?
占位符的sql
,可以一次执行多条语句。
注意:该函数不仅回掉成功
或失败
的状态,还回掉结果集
中的每一行数据,complete_callback
是完成的回掉。
示例:
db.each('SELECT name, age, gender FROM [t_user]', [], function(error, row) {
if (error) throw error;
//do somthing
}, function() {
//do somthing
});
关闭数据库连接。
当没有传入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();
跟踪到底执行了哪些sql
语句。可以用来记录日志。
示例:
db.on('trace', function(sql) {
console.log(sql);
});
性能统计。统计sql
语句大约执行了多少毫秒
。
示例:
db.on('profile', function(sql, milliseconds) {
console.log(sql, milliseconds);
});