app.whenReady().then(()=>{createWindow()dbInit()})constsqlite3=require('sqlite3').verbose()letdbconstdbInit=()=>{// Ensure the directory exists
constdbPath=path.join(__dirname,'data','data.db')fs.mkdirSync(path.dirname(dbPath),{recursive: true})// Open SQLite database
db=newsqlite3.Database(dbPath,(err)=>{if(err){console.error('Error opening database',err)}else{console.log('Database opened successfully')}})// Create a table if not exists
db.run('CREATE TABLE IF NOT EXISTS kv_store (key TEXT PRIMARY KEY, value TEXT)',(err)=>{if(err){console.error('Error creating table',err)}})}// 處理IPC通信
ipcMain.handle('set-data',(event,key,value)=>{returnnewPromise((resolve,reject)=>{db.run('INSERT OR REPLACE INTO kv_store (key, value) VALUES (?, ?)',[key,value],(err)=>{if(err){reject(err)}else{resolve()}})})})ipcMain.handle('get-data',(event,key)=>{returnnewPromise((resolve,reject)=>{db.get('SELECT value FROM kv_store WHERE key = ?',[key],(err,row)=>{if(err){reject(err)}else{resolve(row?row.value : null)}})})})
這段代碼在一個 Electron 應用程序中初始化了一個 SQLite 數據庫,並確保在創建或打開數據庫之前,數據庫所在的目錄已經存在。此外,還設置了 IPC(進程間通信)處理器,用於在主進程和渲染進程之間進行數據傳遞。以下是這段代碼的詳細解釋:
1. 應用程序初始化:
app.whenReady() 方法會在 Electron 應用程序完全就緒後運行 createWindow() 和 dbInit()。
createWindow() 是一個創建應用程序主窗口的函數(在代碼中未顯示)。
dbInit() 被調用來初始化 SQLite 數據庫。
2. SQLite 數據庫初始化 (dbInit()):
使用 path.join 構造 dbPath,指定數據庫文件 (data.db) 的位置,位於 data 目錄中。