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;…