使用SQLite数据库
1.环境搭建[在windows专业版X64下]
1.1. 安装 python-3.10.11-amd64.exe [直接下一步到底]
下载地址: Windows installer (64-bit)
安装时选择自动配置环境变量进入Path,手动配置配置环境变量[在Path中加入python文件所在路径如"C:\python"]
1.2. 安装 node-v22.14.0-win-x64.zip
下载地址: node-v22.14.0-win-x64
解压后配置环境变量[在Path中加入node.js文件所在路径如"C:\node"]
1.3. 安装 VisualStudioSetup.exe Community版
下载地址: VisualStudioSetup
安装完成打开的窗口选中 使用C++的桌面开发
在右侧框勾选 Windows 10 SDK (10.0.20348.0), MSVC v140-VS 2015 C++ 生成工具(v14.00) 点击右下角 安装
1.4. 项目中安装相关依赖
npm install sqlite3 --save
npm install --save-dev @electron/rebuild
1.5. 编译[ 参考官网]
.\node_modules\.bin\electron-rebuild.cmd
1.6. 编写测试代码
src/renderer/index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Electron IPC Demo</title>
</head>
<body>
<h1>Electron IPC 示例</h1>
<input type="text" id="user-input" placeholder="输入消息">
<button id="send-message">发送消息</button>
<div id="response-area" style="margin-top: 20px; padding: 10px; border: 1px solid #ccc;"></div>
<!-- 将脚本放在页面底部 -->
<script src="../preload/index.js"></script>
</body>
</html>
src/preload/index.js
// renderer.js
document.addEventListener('DOMContentLoaded', () => {
const { ipcRenderer } = require('electron');
// 监听dom事件并向主进程发送消息
document.getElementById('send-message').addEventListener('click', () => {
const message = document.getElementById('user-input').value;
ipcRenderer.send('message-from-renderer', message);
});
// 监听主进程的响应
ipcRenderer.on('response-to-renderer', (event, response) => {
document.getElementById('response-area').textContent = response;
});
});
src/main/index.js
// 引入依赖
const fs = require('fs')
const sqlite3 = require('sqlite3').verbose()
const os = require('os')
// 获取用户目录
const dbFolder = os.homedir() + '/.code_tool_dev'
// 没有目录创建目录
if (!fs.existsSync(dbFolder)) {
fs.mkdirSync(dbFolder)
}
// 创建数据库文件
const dbObj = new sqlite3.Database(dbFolder + '/private.db')
function createWindow() {
// 插入监听事件
ipcMain.on('message-from-renderer', (event, arg) => {
console.log('接收到渲染器进程的消息:', arg)
dbObj.get('SELECT * FROM config WHERE key=?', ['keyCombination'], (err, row) => {
event.reply('response-to-renderer', `主进程回复: ${JSON.stringify(row)}`)
})
})
}
// 初始化Electron后执行
app.whenReady().then(() => {
// 初始化数据库
dbObj.serialize(() => {
// 建表
dbObj.run(`create table if not exists config( "id" INTEGER NOT NULL ON CONFLICT ABORT PRIMARY KEY AUTOINCREMENT, "key" TEXT NOT NULL, "val" TEXT NOT NULL);`)
// 向表插入数据
dbObj.run(`INSERT OR IGNORE INTO config (id, key, val) VALUES (1, 'keyCombination', 'SHIFT+CONTROL+O');`);
})
})
