1- import sqlite3 , { Database } from "sqlite3" ;
1+ import sqlite3 , { Database } from "better- sqlite3" ;
22import path from "node:path" ;
33import migration from "./migration" ;
44import { AppEnv } from "../env" ;
@@ -12,82 +12,101 @@ let dbConn: Database | null = null;
1212let dbSuccess = false ;
1313
1414const db = {
15+ /**
16+ * 检查数据库连接是否已初始化
17+ * @throws {string } 如果数据库未初始化则抛出异常
18+ */
1519 _check ( ) {
1620 if ( ! dbSuccess ) {
1721 throw "DBNotInitialized" ;
1822 }
1923 } ,
24+ /**
25+ * 执行SQL语句(无返回值)
26+ * @param {string } sql - SQL语句
27+ * @param {any[] } params - 参数数组
28+ * @returns {Promise<void> }
29+ */
2030 async execute ( sql : string , params : any = [ ] ) : Promise < void > {
2131 db . _check ( ) ;
22- return new Promise ( ( resolve , reject ) => {
23- dbConn . prepare ( sql ) . run ( ...params , function ( err ) {
24- if ( err ) {
25- reject ( err ) ;
26- } else {
27- resolve ( undefined ) ;
28- }
29- } ) ;
30- } ) ;
32+ try {
33+ dbConn . prepare ( sql ) . run ( ...params ) ;
34+ } catch ( err ) {
35+ throw err ;
36+ }
3137 } ,
38+ /**
39+ * 插入数据并返回插入的行ID
40+ * @param {string } sql - SQL语句
41+ * @param {any[] } params - 参数数组
42+ * @returns {Promise<string | number> } 插入的行ID
43+ */
3244 async insert ( sql : string , params : any = [ ] ) : Promise < string | number > {
3345 db . _check ( ) ;
34- return new Promise ( ( resolve , reject ) => {
35- dbConn . prepare ( sql ) . run ( ...params , function ( err ) {
36- if ( err ) {
37- reject ( err ) ;
38- } else {
39- resolve ( this . lastID ) ;
40- }
41- } ) ;
42- } ) ;
46+ try {
47+ const result = dbConn . prepare ( sql ) . run ( ...params ) ;
48+ return result . lastInsertRowid ;
49+ } catch ( err ) {
50+ throw err ;
51+ }
4352 } ,
53+ /**
54+ * 查询单行数据
55+ * @param {string } sql - SQL语句
56+ * @param {any[] } params - 参数数组
57+ * @returns {Promise<any> } 查询结果
58+ */
4459 async first ( sql : string , params : any = [ ] ) : Promise < any > {
4560 db . _check ( ) ;
46- return new Promise ( ( resolve , reject ) => {
47- dbConn . prepare ( sql ) . get ( ...params , ( err , row ) => {
48- if ( err ) {
49- reject ( err ) ;
50- } else {
51- resolve ( row ) ;
52- }
53- } ) ;
54- } ) ;
61+ try {
62+ return dbConn . prepare ( sql ) . get ( ...params ) ;
63+ } catch ( err ) {
64+ throw err ;
65+ }
5566 } ,
67+ /**
68+ * 查询多行数据
69+ * @param {string } sql - SQL语句
70+ * @param {any[] } params - 参数数组
71+ * @returns {Promise<any[]> } 查询结果数组
72+ */
5673 async select ( sql : string , params : any = [ ] ) : Promise < any [ ] > {
5774 db . _check ( ) ;
58- return new Promise ( ( resolve , reject ) => {
59- dbConn . prepare ( sql ) . all ( ...params , ( err , rows ) => {
60- if ( err ) {
61- reject ( err ) ;
62- } else {
63- resolve ( rows ) ;
64- }
65- } ) ;
66- } ) ;
75+ try {
76+ return dbConn . prepare ( sql ) . all ( ...params ) ;
77+ } catch ( err ) {
78+ throw err ;
79+ }
6780 } ,
81+ /**
82+ * 更新数据并返回影响的行数
83+ * @param {string } sql - SQL语句
84+ * @param {any[] } params - 参数数组
85+ * @returns {Promise<number> } 影响的行数
86+ */
6887 async update ( sql : string , params : any = [ ] ) : Promise < number > {
6988 db . _check ( ) ;
70- return new Promise ( ( resolve , reject ) => {
71- dbConn . prepare ( sql ) . run ( ...params , function ( err ) {
72- if ( err ) {
73- reject ( err ) ;
74- } else {
75- resolve ( this . changes ) ;
76- }
77- } ) ;
78- } ) ;
89+ try {
90+ const result = dbConn . prepare ( sql ) . run ( ...params ) ;
91+ return result . changes ;
92+ } catch ( err ) {
93+ throw err ;
94+ }
7995 } ,
96+ /**
97+ * 删除数据并返回影响的行数
98+ * @param {string } sql - SQL语句
99+ * @param {any[] } params - 参数数组
100+ * @returns {Promise<number> } 影响的行数
101+ */
80102 async delete ( sql : string , params : any = [ ] ) : Promise < number > {
81103 db . _check ( ) ;
82- return new Promise ( ( resolve , reject ) => {
83- dbConn . prepare ( sql ) . run ( ...params , function ( err ) {
84- if ( err ) {
85- reject ( err ) ;
86- } else {
87- resolve ( this . changes ) ;
88- }
89- } ) ;
90- } ) ;
104+ try {
105+ const result = dbConn . prepare ( sql ) . run ( ...params ) ;
106+ return result . changes ;
107+ } catch ( err ) {
108+ throw err ;
109+ }
91110 } ,
92111} ;
93112
@@ -120,20 +139,25 @@ const migrate = async () => {
120139 }
121140} ;
122141
142+ /**
143+ * 初始化数据库连接
144+ * @returns {Promise<void> }
145+ */
123146const init = async ( ) => {
124147 dbPath = path . join ( AppEnv . dataRoot , "database.db" ) ;
125148 const userDbPath = path . join ( AppEnv . userData , "database.db" ) ;
126149 if ( fs . existsSync ( userDbPath ) ) {
127150 dbPath = userDbPath ;
128151 }
129- dbConn = new sqlite3 . Database ( dbPath , err => {
130- if ( err ) {
131- Log . error ( "DBConnect SQLite database failed:" , err . message ) ;
132- } else {
133- dbSuccess = true ;
134- migrate ( ) . then ( ) ;
135- }
136- } ) ;
152+ try {
153+ dbConn = new sqlite3 ( dbPath ) ;
154+ dbSuccess = true ;
155+ await migrate ( ) ;
156+ Log . info ( "Database connected successfully" ) ;
157+ } catch ( err ) {
158+ Log . error ( "DBConnect SQLite database failed:" , err . message ) ;
159+ throw err ;
160+ }
137161} ;
138162
139163ipcMain . handle ( "db:execute" , ( event , sql : string , params : any ) => {
0 commit comments