nodejs集成sqlite

  

正在物色节点上面的轻量级嵌入式数据库,作为嵌入式数据库的代表,sqlite无疑是个理想的选择方案.npm上集成sqlite的库主要有两个——sqlite3和领域。

领域是一个理想的选择方案,它最初是为移动软件设计的,在节点也可以运行的,但是不支持Windows系统.sqlite3是一个专为nodejs设计的,在nodejs上面生态更健壮,因此最终选择sqlite3。

sqlite3几乎支持所有版本的nodejs,同时也可以和nwjs集成。

安装

基于npm安装

 npm  install  sqlite3 

这样除了安装完sqlite3的npm包,最主要的是也装完了sqlite数据库,因为sqlite是嵌入式数据库,嵌入到客户端中.sqlite3使用node-pre-gyp为各个平台下载指定的预编译的二进制文件。如果无法下载到预编译的二进制文件,sqlite3将使用node-gyp和源代码来构建扩展。

这个过程出现两个的库——node-pre-gyp和node-gyp。他们究竟是什么呢?

node-gyp是一个跨平台的命令行工具,用于编译c++编写的nodejs扩展,首先诈欺行为是为铬项目创建的项目生成工具,可以从平台无关的配置生成平台相关的Visual Studio, Xcode, Makefile的项目文件,node-gyp就是将其集成到nodejs中。因为linux的二进制分发快平台做的并不好,所有npm为了方便干脆就直接源码分发,用户装的时候再现场编译。不过对有些项目二进制分发就比源码分发简单多了,所以还有个node-pre-gyp来直接二进制扩展的分发。

两者区别在于node-gyp是发布扩展的源码,然后安装时候编译;node-pre-gyp是直接发布编译后的二级制形式的扩展。

和sqlite3一样的需要基于node-gyp安装的npm模块也有很多,比如node-sass等,都是发布源代码,然后编译安装。

基础api

sqlite3的api都是基于函数回调的,因为nodejs中没有像java的jdbc那种官方的数据库客户端接口,因此每个数据库的api都不一样,这里简单介绍几个sqlite3重要的api。

新建并打开数据库

 new  sqlite3.Database(文件名,,(模式),(回调))

该方法返回一个自动打开的数据库对象,参数:

文件名:有效值是一个文件名,如:“mydatebase.db”,数据库打开之后会创建一个“mydatebase.db”的文件用于保存数据。如果文件名是“:记忆:”,表示是一个内存数据库(类似h3那种),数据不会持久化保存,当关闭数据库时,内容将丢失。

模式(可选):数据库的模式,共3种值:sqlite3.OPEN_READONLY(只读),sqlite3.OPEN_READWRITE(可读写)和sqlite3。OPEN_CREATE(可以创建)。默认值为OPEN_READWRITE | OPEN_CREATE。

回调(可选):则当数据库成功打开或发生错误时,将调用此函数。第一个参数是一个错误对象,当它为空时,表示打开成功。

打开一个数据库,如:

//数据库的名字是“mydatebase.db”var 数据库;database =, new  sqlite3.Database (“mydatebase.db”,函数(e) {, if  (err), throw 犯错;
  });//也可以使用内存型,数据不会永久保存database =, new  sqlite3.Database(“:记忆:”,函数(e) {, if  (err), throw 犯错;
  });

执行后会在项目的根目录生成一个“mydatebase.db”文件,这就是sqlite保存数据的文件了。

关闭数据库

数据库#关闭((回调))

该方法可以关闭一个数据库连接对象,参数:

回调(可选):关闭成功的回调。第一个参数是一个错误对象,当它为“空”时,表示关闭成功。

执行DDL和DML语句

 #运行数据库(sql,参数,,,,(回调))

该方法可以执行DDL和DML语句,如建表,删除表,删除行数据,插入行数据等,参数:

sql:要运行的sql字符串. sql的类型是DDL和DML, DQL不能使用这个命令。执行后返回值不包含任何结果,必须通过调回调函数获取执行结果。

参数,…(可选):当sql语句包含占位符(?)时,这里可以传对应的参数。这里有三种传值方法,如:

//,直接通过参数传值.db.run (“UPDATE  tbl  SET  name =, ?, WHERE  id =, ?”,,“酒吧”,2),
//,将值封装为一个数组传值.db.run (“UPDATE  tbl  SET  name =, ?, WHERE  id =, ?“,,(,“酒吧”,2,]);
//,使用一个json传值。参数的前缀可以是”:名称”,“@ name”和“名称”美元。推荐用" $ name”形式db.run (“UPDATE  tbl  SET  name =, name 美元;WHERE  id =, $ id ",, {$ id:大敌;2,,名字:美元,“酒吧”});

nodejs集成sqlite