当前博客:Electron 可以封装sqlcipher吗?sqlite加密数据库

305 次浏览【转载需注明来源】

博客作者:【上头中】

个性签名:寒窗苦读十年一朝凤舞九天

https://www.npmjs.com/package/@journeyapps/sqlcipher

这是Git地址 https://github.com/journeyapps/node-sqlcipher

这是例子感谢官方支持!

导入模块

npm install "@journeyapps/sqlcipher"
npm install sqlite3
Markup

 导入环境后执行journeyapps/sqlcipher示例

变量 sqlite3 = 导入模块("@journeyapps/sqlcipher").verbose();
变量 path = 导入模块("path");

// 设置数据库文件路径
变量 dbPath = path.到可读文本("E:", "test.db");
// 设置数据库密码
变量 password = "123"; // 更换为你的密码

变量 db = 新建对象 sqlite3.Database(dbPath);

db.serialize(定义函数 () {
    // This is the 定义默认, but it is good to specify explicitly:
    db.run("PRAGMA cipher_compatibility = 4");

    // To open a database created with SQLCipher 3.x, use 本对象:
    // db.run("PRAGMA cipher_compatibility = 3");

    db.run("PRAGMA key = '" + password + "'");
    db.run("CREATE TABLE IF NOT EXISTS lorem (info TEXT)");

    变量 stmt = db.prepare("INSERT INTO lorem VALUES (?)");
    循环 (变量 i = 0; i < 10; i++) {
        stmt.run("Ipsum " + i);
    }
    stmt.finalize();

    db.each("SELECT rowid AS id, info FROM lorem", 定义函数 (err, row) {
        调试输出(row.id + ": " + row.info);
    });
});

db.close();
Markup

设置的数据库默认创建在E:/test.db

这是快码运行的调试结果

加密后效果

默认排序
Generic placeholder image
Generic placeholder image
已采纳
快码FOF编程 Time: 2024-03-10 21:58:35

该功能已在刚才推送更新的功能中实现,用法与原本的sqlite支持库一摸一样

参考下述代码:

<按钮 点击回调="执行SQLITE查询()">执行SQLITE查询</按钮>
<脚本>
    //这里执行相关的JS代码
    局部变量 返回的连接ID = sqlite客户端.数据库路径(文件操作类.取资源目录() + "/@文件_test.db", "123");
    //数据库路径的第二个参数就是SQLITE的密码
    异步 定义函数 执行SQLITE查询() {
        局部变量 查询结果 = 同步 sqlite客户端.查询SQL语句_同步("select * from lorem", [], 返回的连接ID);
        调试输出(查询结果);
    }
</脚本>

整体案例:

SQLITE带密码连接功能案例.zip

值得注意的是,如果使用带密码的功能,则需要在快码FOF终端下载对应的支持库

具体流程如下:

1、首先需要调试运行一下你的项目

然后再把调试运行的窗口关闭,这一步很重要。

2、接下来在快码FOF的终端窗口下载sqlite带密码连接的支持库:

npm install @journeyapps/sqlcipher --save

点击确认后,就耐心等待支持库下载即可;这个过程可能需要一些时间,一般几分钟内完成。

下面是正在下载过程中的一些截图:

看见上面的提示,就代表已经下载完毕了,接下来就可以愉快的正常运行项目了。

值得注意的是,库是从github上面下载的,所以速度会比较慢;一定要耐心等候;如果遇见十来分钟都还没有成功,那么就删除fofdebug目录,重新执行一次刚刚的流程。

Generic placeholder image
快码FOF编程 Time: 2024-03-10 12:41:10

可以考虑做成一个三方模块开源到论坛,不纳入到官方库。

你提供一个加密的sqlite文件和打开密码,上传到回复区域;这边安排给你做一个三方模块

Generic placeholder image
上头中 回复 1楼 快码FOF编程 Time: 2024-03-10 14:06:48

感谢官方,我明细了问题,希望官方可以封装这个加密的数据库,桌面端应用真的很需要加密数据库,sqlite加密数据库完全能够胜任!

Generic placeholder image
快码FOF编程 Time: 2024-03-10 22:06:16

注意:基于NPM下载支持库的方案每一次您的支持库有变动【例如新增或取消了系统的某些支持库】,都需要执行一次这个过程。

更加简单的做法是把下载好的库直接复制到快码FOF的sqlite支持库目录中,这样就可以长久生效;不管支持库变动与否都不需要再重复下载。例如:

Generic placeholder image
上头中 回复 4楼 快码FOF编程 Time: 2024-03-10 23:28:30

快码官方yyds!

提供这么高效的IDE真是谁用谁上头,关键官方真的很用心,再也不用担心头发离家出走了!

sqlite加密数据库的加入,快码Electron已经足以开发商业级跨平台应用程序了。各位直接冲。

Generic placeholder image
快码FOF编程 回复 5楼 上头中 Time: 2024-03-10 23:52:37

上面回复的感觉还是有点复杂,于是对NPM的操作又进行了一次升级,最终本帖子以本条回复为准,同时这也是最终方案

参考下述代码:

<按钮 点击回调="执行SQLITE查询()">执行SQLITE查询</按钮>
<脚本>
    //这里执行相关的JS代码
    局部变量 返回的连接ID = sqlite客户端.数据库路径(文件操作类.取资源目录() + "/@文件_test.db", "123");
    //数据库路径的第二个参数就是SQLITE的密码
    异步 定义函数 执行SQLITE查询() {
        局部变量 查询结果 = 同步 sqlite客户端.查询SQL语句_同步("select * from lorem", [], 返回的连接ID);
        调试输出(查询结果);
    }
</脚本>

整体案例:

SQLITE带密码连接功能案例.zip

值得注意的是,如果使用带密码的功能,则需要在快码FOF终端下载对应的支持库

具体流程如下:

1、点击终端区域的【命令及设置】打开终端窗口,并点击【设置终端NPM下载项目模式】

2、接下来在快码FOF的终端窗口下载sqlite带密码连接的支持库:

npm install @journeyapps/sqlcipher --save

点击确认后,就耐心等待支持库下载即可;这个过程可能需要一些时间,一般几分钟内完成。

下面是正在下载过程中的一些截图:

看见上面的提示,就代表已经下载完毕了,接下来就可以愉快的正常运行项目了。

值得注意的是,库是从github上面下载的,所以速度会比较慢;一定要耐心等候;如果遇见十来分钟都还没有成功,那么就删除项目目录中的【node_modules目录】,重新执行一次刚刚的流程即可。

如果卡住重新删除node_modules目录图解:


Electron 可以封装sqlcipher吗?sqlite加密数据库