dataPreferences.getPreferences(this.context,'mystore',(err, preferences)=>{if(err){console.error(`Failed to get preferences. Code:${err.code},message:${err.message}`);return;}console.info('Succeeded in getting preferences.');// 進行相關數據操作})
數據操作
寫入數據,如果已經存在則會覆蓋,可利用.has() 判斷是否存在
preferences.put('startup','auto',(err)=>{if(err){console.error(`Failed to put data. Code:${err.code}, message:${err.message}`);return;}console.info('Succeeded in putting data.');})
讀取數據,如果值為null或者非默認值類型,則返回默認數據。
preferences.get('startup','default',(err, val)=>{if(err){console.error(`Failed to get value of 'startup'. Code:${err.code}, message:${err.message}`);return;}console.info(`Succeeded in getting value of 'startup'. val: ${val}.`);})
刪除數據
preferences.delete('startup',(err)=>{if(err){console.error(`Failed to delete the key 'startup'. Code:${err.code}, message:${err.message}`);return;}console.info("Succeeded in deleting the key 'startup'.");})
數據持久化,應用存入數據到Preferences實例后,可以使用flush()方法實現數據持久化
preferences.flush((err)=>{if(err){console.error(`Failed to flush. Code:${err.code}, message:${err.message}`);return;}console.info('Succeeded in flushing.');})
// 建表Sql語句constSQL_CREATE_TABLE='CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)';
獲取rdb,執行SQL,后續的所有增刪改查都是使用rdbStore對象
relationalStore.getRdbStore(this.context,STORE_CONFIG,(err, store)=>{if(err){console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);return;}console.info(`Succeeded in getting RdbStore.`);store.executeSql(SQL_CREATE_TABLE);// 創建數據表// 這里執行數據庫的增、刪、改、查等操作});
(2)增刪改數據
a.新增數據
const valueBucket ={'NAME':'Lisa','AGE':18,'SALARY':100.5,'CODES':newUint8Array([1,2,3,4,5])};//EMPLOYEE 數據表名
store.insert('EMPLOYEE', valueBucket,(err, rowId)=>{if(err){console.error(`Failed to insert data. Code:${err.code}, message:${err.message}`);return;}console.info(`Succeeded in inserting data. rowId:${rowId}`);})
let predicates =newrelationalStore.RdbPredicates('EMPLOYEE');
predicates.equalTo('NAME','Lisa');
store.delete(predicates,(err, rows)=>{if(err){console.error(`Failed to delete data. Code:${err.code}, message:${err.message}`);return;}console.info(`Delete rows: ${rows}`);})
(3)查詢數據
a.查詢數據、返回一個ResultSet結果集
let predicates =newrelationalStore.RdbPredicates('EMPLOYEE');
predicates.equalTo('NAME','Rose');let result =await store.query(predicates,['ID','NAME','AGE','SALARY','CODES'])
b.解析結果
// 準備數組保存結果let tasks:any[]=[]//循環遍歷結果集,判斷結果是否遍歷到最后一行while(!result.isAtLastRow){//指針移動到下一行數據result.goToNextRow()//根據字段名獲取字段index,從而獲取字段值let id = result.getLong(result.getColumnIndex('ID'));let name = result.getString(result.getColumnIndex('NAME'));tasks.push({id,name})}
(4)完整代碼示例
ets/model/TaskModel.ets
import relationalStore from'@ohos.data.relationalStore';import TaskInfo from'../viewmodel/TaskInfo';classTaskModel{private rdbStore: relationalStore.RdbStoreprivate tableName:string='TASK'/*** 初始化任務表*/initTaskDB(context){// 1.rdb配置const config ={name:'MyApplication.db',securityLevel: relationalStore.SecurityLevel.S1}// 2.初始化SQL語句const sql =`CREATE TABLE IF NOT EXISTS TASK (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL,FINISHED bit)`// 3.獲取rdbrelationalStore.getRdbStore(context, config,(err, rdbStore)=>{if(err){console.log('testTag','獲取rdbStore失敗!')return}// 執行SqlrdbStore.executeSql(sql)console.log('testTag','創建task表成功!')// 保存rdbStorethis.rdbStore = rdbStore})}/*** 查詢任務列表*/asyncgetTaskList(){// 1.構建查詢條件let predicates =newrelationalStore.RdbPredicates(this.tableName)// 2.查詢let result =awaitthis.rdbStore.query(predicates,['ID','NAME','FINISHED'])// 3.解析查詢結果// 3.1.定義一個數組,組裝最終的查詢結果let tasks: TaskInfo[]=[]// 3.2.遍歷封裝while(!result.isAtLastRow){// 3.3.指針移動到下一行result.goToNextRow()// 3.4.獲取數據let id = result.getLong(result.getColumnIndex('ID'))let name = result.getString(result.getColumnIndex('NAME'))let finished = result.getLong(result.getColumnIndex('FINISHED'))// 3.5.封裝到數組tasks.push({id, name, finished:!!finished})}console.log('testTag','查詢到數據:',JSON.stringify(tasks))return tasks}/*** 添加一個新的任務* @param name 任務名稱* @returns 任務id*/addTask(name:string):Promise<number>{returnthis.rdbStore.insert(this.tableName,{name, finished:false})}/*** 根據id更新任務狀態* @param id 任務id* @param finished 任務是否完成*/updateTaskStatus(id:number, finished:boolean){// 1.要更新的數據let data ={finished}// 2.更新的條件let predicates =newrelationalStore.RdbPredicates(this.tableName)predicates.equalTo('ID', id)// 3.更新操作returnthis.rdbStore.update(data, predicates)}/*** 根據id刪除任務* @param id 任務id*/deleteTaskById(id:number){// 1.刪除的條件let predicates =newrelationalStore.RdbPredicates(this.tableName)predicates.equalTo('ID', id)// 2.刪除操作returnthis.rdbStore.delete(predicates)}}let taskModel =newTaskModel();exportdefault taskModel as TaskModel;
notificationManager.publish(request,(err)=>{if(err){console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`);return;}console.info('Succeeded in publishing notification.');});
let notificationRequest ={id:1,content:{contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,// 普通文本類型通知normal:{title:'通知標題',text:'通知內容詳情',additionalText:'通知附加內容',}}}
長文本類型
let notificationRequest ={id:1,content:{contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT,// 長文本類型通知longText:{title:'通知標題',text:'通知內容詳情',additionalText:'通知附加內容',longText:'通知中的長文本、很長很長。。。',briefText:'通知概要總結',expandedTitle:'通知展開時的標題',}}}
多行文本類型
let notificationRequest ={id:1,content:{contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE,// 多行文本類型通知multiLine:{title:'通知標題',text:'通知內容詳情',additionalText:'通知附加內容',briefText:'通知概要總結',longTitle:'展開時的標題,有多行,我很寬',lines:['第一行','第二行','第三行','第四行'],}}}
let wantAgentInfo ={wants:[{deviceId:'',bundleName:'com.example.test',abilityName:'com.example.test.MainAbility',action:'',entities:[],uri:'',parameters:{}}],operationType: wantAgent.OperationType.START_ABILITY,requestCode:0,wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG]}
引言勸退
VSCode,全稱為Visual Studio Code,是由微軟開發的一款輕量級,跨平臺的代碼編輯器。大家能來搜用VSCode配置c/c,想必也知道VSCode的強大,可以手握一個VSCode同時編寫如C,C,C#ÿ…
mybatis plus 深入學習
常見注解
1.TableName
描述:表名注解,標識實體類對應的表使用位置:實體類
TableName("sys_user")
public class User {private Long id;private String name;private Integer age;private String email;…