zoukankan      html  css  js  c++  java
  • node-webkit中使用sqlite3(MAC平台)

    前言

    最近使用node-webkit开发一款博客发布软件,来替换难用的Windows Live Writer(主要是对Markdown标签的支持很差劲)。为了解决博文信息临时保存的问题,想到了使用sqlite这个小型的数据库。折腾的过程中遇到不少问题,这里做个记录方便以后查阅。

    安装Sqlite3模块

    参考sqlite3的官方文档说明,使用npm install sqlite3安装sqlite3。

    使用node-webkit测试官方给出的一段代码:

    <script type="text/javascript">
      var sqlite3 = require('sqlite3').verbose();
      var db = new sqlite3.Database('data.db');
        db.serialize(function() {
        db.run("CREATE TABLE lorem (info TEXT)");
    
        var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
        for (var i = 0; i < 10; i++) {
            stmt.run("Ipsum " + i);
        }
        stmt.finalize();
    
        db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
            console.log(row.id + ": " + row.info);
        });
      });
    
      db.close();
    </script>

    执行以上代码会报如下错误:

    Uncaught Error: Cannot find module './binding/Release/node-v11-darwin-ia32/node_sqlite3.node'

    这是因为我是用的node-webkit是32位的,而使用npm安装的sqlite3模块是针对node.js的64位版本,如下图所示:

    看了下sqlite3的官方文档,文档中提到,nodejs和node-webkit的ABI不同,需要针对node-webkit重新编译sqlite3。

    重新编译针对node-webkit的sqlite3模块

    这个过程还是参考的sqlite3的官方资料,不过过程中遇到不少问题。

    这里直接给出正确的编译步骤:

    1. 没有安装nw-gyp的话,全局安装之:sudo npm install nw-gyp -g (nw-gyp可以用来编译针对node-webkit的C++ add on模块,因为node-sqlite3有部分代码是用C语言编写的,所以需要针对不同平台进行单独编译)

    2. cd到sqlite3的安装目录(node_modules/sqlite3),执行重新编译命令:nw-gyp rebuild --target=0.8.4 --arch=ia32 (target参数是node-webkit的版本,根据自己使用的node-webkit版本号自行修改,arch参数是node-webkit的架构信息,我用的是mac 32位的node-webkit,所以必须指定为ia32)

    3. 将编译的node_sqlite3.node(在node_modules/sqlite3/build/Release目录下)放到合适的目录:node_modules/sqlite3/lib/binding/Release/node-v11-darwin-ia32 (node-v11-darwin-ia32默认是不存在的,需要手动创建)

    再次测试官方给出的代码

    再次执行后控制台输出结果如下(可以看到select语句的查询结果输出,表明可以正常使用了):

  • 相关阅读:
    树的最小支配集 最小点覆盖 与 最大独立集 (图论)
    P1993 小K的农场 (差分约束)
    P1168 中位数 (优先队列,巧解)
    STL 优先队列
    P3799 妖梦拼木棒 (组合数学)
    P2389 电脑班的裁员 (动态规划)
    3-Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)
    1-匿名对象
    2-封装性
    2-递归调用
  • 原文地址:https://www.cnblogs.com/jasondan/p/3500965.html
Copyright © 2011-2022 走看看