1# 创建DataAbility 2 3 4实现DataAbility中Insert、Query、Update、Delete接口的业务内容。保证能够满足数据库存储业务的基本需求。BatchInsert与ExecuteBatch接口已经在系统中实现遍历逻辑,依赖Insert、Query、Update、Delete接口逻辑,来实现数据的批量处理。 5 6 7创建DataAbility的代码示例如下: 8 9```ts 10import featureAbility from '@ohos.ability.featureAbility'; 11import type common from '@ohos.app.ability.common'; 12import type Want from '@ohos.app.ability.Want'; 13import type { AsyncCallback, BusinessError } from '@ohos.base'; 14import dataAbility from '@ohos.data.dataAbility'; 15import rdb from '@ohos.data.rdb'; 16import hilog from '@ohos.hilog'; 17 18let TABLE_NAME = 'book'; 19let STORE_CONFIG: rdb.StoreConfig = { name: 'book.db' }; 20let SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS book(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, introduction TEXT NOT NULL)'; 21let rdbStore: rdb.RdbStore | undefined = undefined; 22const TAG: string = '[Sample_FAModelAbilityDevelop]'; 23const domain: number = 0xFF00; 24 25class DataAbility { 26 onInitialized(want: Want): void { 27 hilog.info(domain, TAG, 'DataAbility onInitialized, abilityInfo:' + want.bundleName); 28 let context: common.BaseContext = { stageMode: featureAbility.getContext().stageMode }; 29 rdb.getRdbStore(context, STORE_CONFIG, 1, (err, store) => { 30 hilog.info(domain, TAG, 'DataAbility getRdbStore callback'); 31 store.executeSql(SQL_CREATE_TABLE, []); 32 rdbStore = store; 33 }); 34 } 35 36 insert(uri: string, valueBucket: rdb.ValuesBucket, callback: AsyncCallback<number>): void { 37 hilog.info(domain, TAG, 'DataAbility insert start'); 38 if (rdbStore) { 39 rdbStore.insert(TABLE_NAME, valueBucket, callback); 40 } 41 } 42 43 batchInsert(uri: string, valueBuckets: Array<rdb.ValuesBucket>, callback: AsyncCallback<number>): void { 44 hilog.info(domain, TAG, 'DataAbility batch insert start'); 45 if (rdbStore) { 46 for (let i = 0; i < valueBuckets.length; i++) { 47 hilog.info(domain, TAG, 'DataAbility batch insert i=' + i); 48 if (i < valueBuckets.length - 1) { 49 rdbStore.insert(TABLE_NAME, valueBuckets[i], (err: BusinessError, num: number) => { 50 hilog.info(domain, TAG, 'DataAbility batch insert ret=' + num); 51 }); 52 } else { 53 rdbStore.insert(TABLE_NAME, valueBuckets[i], callback); 54 } 55 } 56 } 57 } 58 59 query(uri: string, columns: Array<string>, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback<rdb.ResultSet>): void { 60 hilog.info(domain, TAG, 'DataAbility query start'); 61 let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates); 62 if (rdbStore) { 63 rdbStore.query(rdbPredicates, columns, callback); 64 } 65 } 66 67 update(uri: string, valueBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback<number>): void { 68 hilog.info(domain, TAG, 'DataAbility update start'); 69 let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates); 70 if (rdbStore) { 71 rdbStore.update(valueBucket, rdbPredicates, callback); 72 } 73 } 74 75 delete(uri: string, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback<number>): void { 76 hilog.info(domain, TAG, 'DataAbility delete start'); 77 let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates); 78 if (rdbStore) { 79 rdbStore.delete(rdbPredicates, callback); 80 } 81 } 82} 83 84export default new DataAbility(); 85``` 86