feat 添加数据库模块

This commit is contained in:
Ironsp
2026-09-09 17:18:25 +08:00
parent edb640a64b
commit 7a4477966d
3 changed files with 113 additions and 20 deletions

View File

@@ -1,6 +1,4 @@
import DB from '@/utils/sqlite'
// 导入可删但爆红, 可正常运行
import { projectTableSql } from './project'
import { rtkTrackTableSql } from './rtkTrack'
import { warningRecordTableSql } from './warningRecord'
@@ -11,19 +9,20 @@ export { rtkTrackTableSql } from './rtkTrack'
export { warningRecordTableSql } from './warningRecord'
export { workRecordTableSql } from './workRecord'
const tableSqls = [
projectTableSql,
workRecordTableSql,
rtkTrackTableSql,
warningRecordTableSql,
]
/**
* 初始化数据库
*/
export async function initTables() {
const sqls = [
projectTableSql,
workRecordTableSql,
rtkTrackTableSql,
warningRecordTableSql,
]
try {
await DB.transaction(sqls)
console.log('开始初始化数据库表...')
await DB.transaction(tableSqls)
console.log('数据库表初始化成功')
}
catch (err) {

View File

@@ -72,8 +72,16 @@ class DB {
resolve()
},
fail(err: any) {
console.error('数据库打开失败:', err)
reject(err)
// -1402: Same Name Already Open,数据库已打开则视为成功
if (err?.code === -1402) {
console.log('数据库已打开,跳过')
isOpen = true
resolve()
}
else {
console.error('数据库打开失败:', err)
reject(err)
}
},
})
})
@@ -147,25 +155,65 @@ class DB {
}
/**
* 执行事务
* 执行事务(BEGIN → SQLs → COMMIT,失败自动 ROLLBACK)
*/
static transaction(sqls: string[]): Promise<void> {
return DB.open().then(() => {
return new Promise((resolve, reject) => {
static async transaction(sqls: string[]): Promise<void> {
await DB.open()
// 开启事务
await new Promise<void>((resolve, reject) => {
plus.sqlite.transaction({
name: DB_NAME,
operation: 'begin',
success() {
resolve()
},
fail(err: any) {
console.error('开启事务失败:', err)
reject(err)
},
})
})
try {
// 逐条执行 SQL
for (const sql of sqls) {
await DB.executeSql(sql)
}
// 提交事务
await new Promise<void>((resolve, reject) => {
plus.sqlite.transaction({
name: DB_NAME,
sql: sqls,
operation: 'commit',
success() {
console.log('事务执行成功')
console.log('事务提交成功')
resolve()
},
fail(err: any) {
console.error('事务执行失败:', err)
console.error('提交事务失败:', err)
reject(err)
},
})
})
})
}
catch (err) {
// 回滚事务
await new Promise<void>((resolve) => {
plus.sqlite.transaction({
name: DB_NAME,
operation: 'rollback',
success() {
console.log('事务回滚成功')
resolve()
},
fail() {
resolve()
},
})
})
throw err
}
}
// ======================== CRUD 封装方法 ========================