92 lines
2.5 KiB
Plaintext
Raw Normal View History

2025-03-07 11:54:23 +08:00
import { TableDefinition, User } from '../../model';
import DB, { ColumnInfo, ColumnType } from '../DbSql';
2025-02-20 13:27:49 +08:00
import { ParameterPlatform } from './Relationship';
2025-03-07 11:54:23 +08:00
import { BusinessError } from '@ohos.base';
2025-02-20 13:27:49 +08:00
// 建表操作
2025-03-07 11:54:23 +08:00
export async function InitTable() {
2025-02-20 13:27:49 +08:00
Object.keys(ParameterPlatform).forEach(async (item) => {
2025-03-07 11:54:23 +08:00
await DB.executeSql(ParameterPlatform[item].sqlCreate);
2025-02-20 13:27:49 +08:00
});
}
2025-03-07 11:54:23 +08:00
// 插表操作
export function SqlInsertTable(tableName: string, data: Array<User>, delFlag = true): Promise<boolean> {
return new Promise((resolve, reject) => {
data.forEach((element, index) => {
element.id = !delFlag ? `${index + data.length}` : `${index}`
})
DB.clearTable(tableName).then((res) => {
const columns = Object.keys(data[0]).join(', ');
const values = data
.map((item) => {
const rowValues = Object.values(item)
.map((value: string | number) => (typeof value === 'string' ? `'${value}'` : value))
return `(${rowValues})`;
})
.join(', ');
let INSERT_SQL = "INSERT INTO " + tableName
+ " (" + columns + ") VALUES " + values
DB.executeSql(INSERT_SQL).then(() => {
console.log('sql insert,', res, 'tableName', tableName)
resolve(true)
}).catch((err: BusinessError) => {
console.log('sql insert err,', JSON.stringify(err), 'tableName', tableName)
reject(err)
})
})
})
}
// 参数平台
// TODO 后续废弃这个方法,直接调用SqlInsertTable
// 依据数组和表名更新sql表
export function UpdateTableByArray(tableName: string, arr: Array<User>): Promise<boolean> {
return SqlInsertTable(tableName, arr)
}
//依据表名同步获取数据
export async function GetSyncData(tableName: string): Promise<boolean> {
return new Promise((resolve, reject) => {
const columns: ColumnInfo[] = ParameterPlatform[tableName].columns.map((res: string) => {
return {
name: res,
columnName: res,
type: ColumnType.STRING
} as ColumnInfo
})
// TODO 需要完善此处类型
DB.queryListBySql<ESObject>(`select * from ${tableName}`, columns).then(() => {
resolve(true)
}).catch((err: BusinessError) => {
reject(err)
})
})
}
// TODO 后续废弃这个方法,直接调用DB.deleteByName
// 删除表
export async function DeleteSyncTable(tableName: string): Promise<boolean> {
return new Promise((resolve, reject) => {
DB.deleteByName(tableName).then(() => {
resolve(true)
}).catch(() => {
reject(false)
})
})
}