質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

0回答

1736閲覧

electron × sqlite3におけるデータベースクローズ処理からなる「SQLITE_BUSY」の解消方法

tile

総合スコア19

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/10/15 16:22

大変お手数ではございますが、
ご指導のほど何卒どうぞよろしくお願い申し上げます。

electronによるデスクトップアプリを制作しており、データベースはsqlite3を用いております。
main.jsは以下のように設定しております。(一部公開となります(拙いコードで申し訳ありません))

javascript

1const { app, BrowserWindow, ipcMain, dialog } = require('electron'); 2const path = require('path'); 3const dbPath = path.resolve(__dirname, 'database.db') 4const data = require('sqlite3').verbose(); 5var db = new data.Database(dbPath); 6 7const createWindow = () => { 8 const mainWindow = new BrowserWindow({ 9 width: 1440, 10 height: 900, 11 title: 'マイアプリ', 12 webPreferences: { 13 nodeIntegration: false, 14 contextIsolation: true, 15 preload: path.join(__dirname, 'js/preload.js'), 16 }, 17 }); 18 19 mainWindow.loadFile(path.join(__dirname, 'ファイル')); 20}; 21 22app.once('ready', () => { 23 createWindow(); 24}); 25 26app.once('window-all-closed', () => { 27 28 db.close(); 29 30 app.quit() 31} 32 ); 33 34 35//二重起動の防止 36const doubleboot = app.requestSingleInstanceLock(); 37if(!doubleboot){ 38 app.quit(); 39} 40 41 42ipcMain.handle('★★',async (event, data) => { 43 44 const ●● = await db.prepare('INSERT INTO ●●(●●, ●●) VALUES (?, ?)'); 45 ●●.run(["", ""]); 46 47 return await new Promise((resolve, reject) => db.get('SELECT * FROM ●● where ●● = last_insert_rowid();', (err, row) => { 48 if (err) { 49 reject(err); 50 } 51 const stmt = db.prepare('INSERT INTO ●●(●●, ●●, ●●,●●,●●) VALUES (?, ?,?,?,?)'); 52 stmt.run(["●●", "●●","●●","●●","●●"]); 53 resolve(●●); 54 })) 55 56}); 57

preload.jsから「★★」を呼び出した後、ウィンドウを閉じますと
以下のエラーが表示されている状態となっております。

Error: SQLITE_BUSY: unable to close due to unfinalized statements or unfinished backups

以上の状況から質問事項をまとめればと思いまして

①こちらのエラー解消方法について、アドバイスいただければ幸いです。

②アプリのウィンドウを閉じた際、db.close()の表記がなくても、データベースはクローズされた状態となりますでしょうか?

以上2点について、お忙しいところ大変申し訳ありませんが、
何卒ご教授のほどどうぞよろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問