import relationalStore from '@ohos.data.relationalStore';
import promptAction from '@ohos.promptAction';
@Entry
@Component
struct RdbStoreExample {
@State userList: Array<{ id: number; name: string; age: number }> = [];
@State nameInput: string = '';
@State ageInput: string = '';
private rdbStore: relationalStore.RdbStore | null = null;
private rdbConfig: relationalStore.RdbStoreConfig = {
name: 'UserData.db',
securityLevel: relationalStore.SecurityLevel.S1
};
private CREATE_TABLE_USER =
'CREATE TABLE IF NOT EXISTS User (' +
'id INTEGER PRIMARY KEY AUTOINCREMENT, ' +
'name TEXT NOT NULL, ' +
'age INTEGER NOT NULL)';
aboutToAppear() {
this.openRdbStore();
}
aboutToDisappear() {
this.closeRdbStore();
}
// 打开数据库
async openRdbStore() {
try {
this.rdbStore = await relationalStore.getRdbStore(this.rdbConfig, 1,
(version: number, rdbStore: relationalStore.RdbStore) => {
if (version === 1) {
rdbStore.executeSql(this.CREATE_TABLE_USER, []);
}
});
await this.queryUsers();
} catch (error) {
console.error(`Failed to open RDB store: ${error}`);
promptAction.showToast({ message: '数据库打开失败' });
}
}
// 关闭数据库
async closeRdbStore() {
if (this.rdbStore) {
try {
await this.rdbStore.close();
this.rdbStore = null;
} catch (error) {
console.error(`Failed to close RDB store: ${error}`);
}
}
}
// 插入数据
async insertUser() {
if (!this.nameInput || !this.ageInput) {
promptAction.showToast({ message: '请输入姓名和年龄' });
return;
}
try {
const valuesBucket = {
name: this.nameInput,
age: parseInt(this.ageInput)
};
const id = await this.rdbStore?.insert('User', valuesBucket);
if (id && id > 0) {
promptAction.showToast({ message: '插入成功' });
await this.queryUsers();
this.nameInput = '';
this.ageInput = '';
}
} catch (error) {
console.error(`Failed to insert data: ${error}`);
promptAction.showToast({ message: '插入失败' });
}
}
// 查询数据
async queryUsers() {
try {
const resultSet = await this.rdbStore?.querySql(
'SELECT * FROM User', []);
if (resultSet) {
const users = [];
resultSet.goToFirstRow();
while (!resultSet.isAtEnd()) {
users.push({
id: resultSet.getLong(resultSet.getColumnIndex('id')),
name: resultSet.getString(resultSet.getColumnIndex('name')),
age: resultSet.getInt(resultSet.getColumnIndex('age'))
});
resultSet.goToNextRow();
}
this.userList = users;
resultSet.close();
}
} catch (error) {
console.error(`Failed to query data: ${error}`);
promptAction.showToast({ message: '查询失败' });
}
}
// 更新数据
async updateUser(id: number, name: string, age: number) {
try {
const valuesBucket = {
name: name,
age: age
};
const conditions = new relationalStore.RdbStorePredicates('User');
conditions.equalTo('id', id.toString());
const rowsAffected = await this.rdbStore?.update(
valuesBucket, conditions);
if (rowsAffected && rowsAffected > 0) {
promptAction.showToast({ message: '更新成功' });
await this.queryUsers();
}
} catch (error) {
console.error(`Failed to update data: ${error}`);
promptAction.showToast({ message: '更新失败' });
}
}
// 删除数据
async deleteUser(id: number) {
try {
const conditions = new relationalStore.RdbStorePredicates('User');
conditions.equalTo('id', id.toString());
const rowsAffected = await this.rdbStore?.delete(conditions);
if (rowsAffected && rowsAffected > 0) {
promptAction.showToast({ message: '删除成功' });
await this.queryUsers();
}
} catch (error) {
console.error(`Failed to delete data: ${error}`);
promptAction.showToast({ message: '删除失败' });
}
}
build() {
Column() {
// 输入表单
Column() {
Input({
placeholder: '请输入姓名',
type: InputType.Text
})
.width('100%')
.margin({ top: 10, bottom: 10 })
.onChange((value: string) => {
this.nameInput = value;
})
Input({
placeholder: '请输入年龄',
type: InputType.Number
})
.width('100%')
.margin({ top: 10, bottom: 10 })
.onChange((value: string) => {
this.ageInput = value;
})
Button('添加用户')
.width('100%')
.onClick(() => {
this.insertUser();
})
}
.width('90%')
.margin({ top: 20, bottom: 20 })
// 用户列表
List() {
ForEach(this.userList, (user) => {
ListItem() {
Row() {
Column() {
Text(`姓名: ${user.name}`)
Text(`年龄: ${user.age}`)
}
.width('70%')
Column() {
Button('修改')
.onClick(() => {
const newName = promptAction.showPromptDialog({
message: '请输入新姓名',
defaultValue: user.name
});
const newAge = promptAction.showPromptDialog({
message: '请输入新年龄',
defaultValue: user.age.toString()
});
if (newName && newAge) {
this.updateUser(user.id, newName, parseInt(newAge));
}
})
Button('删除')
.onClick(() => {
this.deleteUser(user.id);
})
}
.width('30%')
}
.width('100%')
}
})
}
.width('90%')
.margin({ top: 10, bottom: 10 })
}
.width('100%')
.height('100%')
.padding(15)
}
}
评论