林夕笔记林夕笔记
首页
关于我
首页
关于我
  • 其他笔记

    • VuePress记录
    • Electron

      • 使用SQLite数据库
        • 1.环境搭建[在windows专业版X64下]
          • 1.1. 安装 python-3.10.11-amd64.exe [直接下一步到底]
          • 1.2. 安装 node-v22.14.0-win-x64.zip
          • 1.3. 安装 VisualStudioSetup.exe Community版
          • 1.4. 项目中安装相关依赖
          • 1.5. 编译[ 参考官网]
          • 1.6. 编写测试代码
      • windows版本打包
    • 开发工具

      • IDEA

使用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');`);
  })
})
Next
windows版本打包