feat 添加数据库模块
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 封装方法 ========================
|
||||
|
||||
Reference in New Issue
Block a user