当前位置: 首页 > news >正文

苏州手机网站建设公司抖音代运营收费详细价格

苏州手机网站建设公司,抖音代运营收费详细价格,哪个网站建设公司,网站开发 参考文献前面使用了首选项的存储方式,因此将其他的两种存储方式(键值型数据库和关系型数据库)也学习一下,简单记录一下,并进行封装,方便后续使用。 1、效果预览 2、使用条件 2.1 键值型数据库 键值型数据库实现数据…

图片

前面使用了首选项的存储方式,因此将其他的两种存储方式(键值型数据库和关系型数据库)也学习一下,简单记录一下,并进行封装,方便后续使用。

1、效果预览

2、使用条件

2.1 键值型数据库

        键值型数据库实现数据持久化width=device-width,initial-scale=1.0icon-default.png?t=N7T8http://test.openharmony.cn:7780/pages/v4.0/zh-cn/application-dev/database/data-persistence-by-kv-store.md/

  • 设备协同数据库,针对每条记录,Key的长度≤896 Byte,Value的长度<4 MB。
  • 单版本数据库,针对每条记录,Key的长度≤1 KB,Value的长度<4 MB。

  • 每个应用程序最多支持同时打开16个键值型分布式数据库。

  • 键值型数据库事件回调方法中不允许进行阻塞操作,例如修改UI组件。

2.2 关系型数据库

关系型数据库实现数据持久化width=device-width,initial-scale=1.0icon-default.png?t=N7T8http://test.openharmony.cn:7780/pages/v4.0/zh-cn/application-dev/database/data-persistence-by-rdb-store.md/

  • 系统默认日志方式是WAL(Write Ahead Log)模式,系统默认落盘方式是FULL模式。
  • 数据库中连接池的最大数量是4个,用以管理用户的读操作。

  • 为保证数据的准确性,数据库同一时间只能支持一个写操作。

  • 当应用被卸载完成后,设备上的相关数据库文件及临时文件会被自动清除。

  • ArkTS侧支持的基本数据类型:number、string、二进制类型数据、boolean。

  • 为保证插入并读取数据成功,建议一条数据不要超过2M。超出该大小,插入成功,读取失败。

3、核心API

3.1 键值型数据库

  • createKVManager(创建一个KVManager对象实例)

  • getKVStore(指定Options和storeId,创建并得到指定类型的KVStore数据库)

  • put(添加指定类型的键值对到数据库)

  • get(获取指定键的值)

  • delete(从数据库中删除指定键值的数据)

3.2 关系型数据库

  • getRdbStore(获得一个相关的RdbStore,操作关系型数据库)

  • executeSql(执行包含指定参数但不返回值的SQL语句)

  • deleteRdbStore(删除数据库)

  • insert(插入一行数据)

  • delete(从数据库中删除数据)

  • update(更新数据库中的数据)

  • query(根据指定条件查询数据库中的数据)

4、封装与调用

4.1 键值型数据库

4.1.1 封装

import distributedKVStore from '@ohos.data.distributedKVStore';const BUNDLE_NAME = "dbName_tengyu"let context = getContext(this)
// 数据库对象
let kvManager: distributedKVStore.KVManager | undefined = undefined;
// KVStore数据库
let kvStore: distributedKVStore.SingleKVStore | undefined = undefined;class DistributedUtil {constructor() {this.createKeyValueDB();}async getKvManager(bundleName?: string) {const kvStoreConfig: distributedKVStore.KVManagerConfig = {context: context,bundleName: bundleName || BUNDLE_NAME};try {kvManager = distributedKVStore.createKVManager(kvStoreConfig);}catch (err) {console.error(`error:${err}`)}}// 创建并得到指定类型的KVStore数据库async createKeyValueDB(op?: distributedKVStore.Options) {if (kvManager === undefined) {this.getKvManager();}try {const options: distributedKVStore.Options = {// 当数据库文件不存在时是否创建数据库,默认为truecreateIfMissing: true,// 设置数据库文件是否加密,默认为false,即不加密encrypt: false,// 设置数据库文件是否备份,默认为true,即备份backup: false,// 设置数据库文件是否自动同步。默认为false,即手动同步autoSync: true,// kvStoreType不填时,默认创建多设备协同数据库kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,// 多设备协同数据库:kvStoreType: distributedKVStore.KVStoreType.DEVICE_COLLABORATION,securityLevel: distributedKVStore.SecurityLevel.S1};kvManager.getKVStore<distributedKVStore.SingleKVStore>('storeId', op || options, (err, store: distributedKVStore.SingleKVStore) => {if (err) {console.error(`Failed to get KVStore: Code:${err.code},message:${err.message}`);return;}console.info('Succeeded in getting KVStore.');kvStore = store;});} catch (e) {console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`);}return kvStore;}// 删除指定键值的数据async deleteStoreData(key: string) {if (!kvStore) {return;}try {kvStore.delete(key, (err) => {if (err !== undefined) {console.error(`Failed to delete data. Code:${err.code},message:${err.message}`);return;}console.info('Succeeded in deleting data.');});} catch (e) {console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`);}}// 向键值数据库中插入数据async putStoreData(key: string, value: any) {if (!key || !value) {return}if(!kvStore) {kvStore = await this.createKeyValueDB();}try {kvStore.put(key, value, (err) => {if (err !== undefined) {console.error(`Failed to put data. Code:${err.code},message:${err.message}`);return;}console.info('Succeeded in putting data.');});} catch (e) {console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`);}}// 获取指定键的值async getStoreData(key: string) {if (!key) {return}if(!kvStore) {kvStore = await this.createKeyValueDB();}return new Promise((resolve, reject) => {try {kvStore.get(key, (err, data) => {if (err != undefined) {console.error(`Failed to get data. Code:${err.code},message:${err.message}`);reject(err)return;}resolve(data)});} catch (err) {reject(err)console.error('TAG', `Failed to get value, Cause: ${err}`)}});}
}export default new DistributedUtil();

4.1.2 调用

import distributedUtil from '../../utils/distributedStrong'// 向数据库新增数据
distributedUtil.putStoreData('test0011', JSON.stringify({name: 666,age: 32,date: '2023.06.26'
}))// 获取数据库中的数据
distributedUtil.getStoreData('test0011').then(res => {console.log('===获取数据库中的数据====', JSON.stringify(res))
})

4.2 关系型数据库

关系型数据库运作机制 

4.2.1 封装

import relationalStore from '@ohos.data.relationalStore';const DB_NAME = "RelationStoreDB.db"let context = getContext(this)
let store: relationalStore.RdbStore | undefined = undefined;class RelationalUtil {async getRdbStoreConfig(dbName?: string, config?: relationalStore.StoreConfig) {const STORE_CONFIG: relationalStore.StoreConfig = config || {// 数据库文件名name: dbName || DB_NAME,// 数据库安全级别securityLevel: relationalStore.SecurityLevel.S1,// 可选参数,指定数据库是否加密,默认不加密encrypt: false,};return STORE_CONFIG;}// 创建并得到指定类型的KVStore数据库async createDatabaseTable(sqlCreateTable: string) {const STORE_CONFIG = await this.getRdbStoreConfig();relationalStore.getRdbStore(context, STORE_CONFIG, (err, rdbStore: relationalStore.RdbStore) => {if (err) {console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);return;}console.info('Succeeded in getting RdbStore.');// 当数据库创建时,数据库默认版本为0store = rdbStore;store.executeSql(sqlCreateTable); // 创建数据表})}// 删除数据库async deleteDB(dbName: string = DB_NAME) {relationalStore.deleteRdbStore(context, dbName, (err) => {if (err) {console.error(`Failed to delete RdbStore. Code:${err.code}, message:${err.message}`);return;}console.info('Succeeded in deleting RdbStore.');});}// 向数据库中插入数据async insertDatas(tableName: string, valueBucket) {if (store != undefined) {(store as relationalStore.RdbStore).insert(tableName, valueBucket, (err, rowId: number) => {if (err) {console.error(`Failed to insert data. Code:${err.code}, message:${err.message}`);return;}console.info(`Succeeded in inserting data. rowId:${rowId}`);})}}// 对数据进行修改async updateDatas(tableName: string, valueBucket, key, val) {let predicates = new relationalStore.RdbPredicates(tableName); // 创建表tableName的predicatespredicates.equalTo(key, val); // 匹配表tableName中key为val的字段if (store != undefined) {(store as relationalStore.RdbStore).update(valueBucket, predicates, (err, rowId: number) => {if (err) {console.error(`Failed to insert data. Code:${err.code}, message:${err.message}`);return;}console.info(`Succeeded in inserting data. rowId:${rowId}`);})}}//根据谓词指定的查询条件查找数据async getDatas(tableName: string, atomArr: Array<string>, key: string, val: string | number) {let predicates = new relationalStore.RdbPredicates(tableName);predicates.equalTo(key, val);if (store != undefined) {return new Promise((resolve, reject) => {(store as relationalStore.RdbStore).query(predicates, atomArr, (err, resultSet) => {if (err) {console.error(`Failed to query data. Code:${err.code}, message:${err.message}`);reject(err);return;}resolve(resultSet);console.info(`ResultSet column names: ${resultSet.columnNames}, column count: ${resultSet.columnCount}`);})})}}
}export default new RelationalUtil();

4.2.2 调用

import relationalUtil from '../../utils/relationalStrong';
import { ValuesBucket } from '@ohos.data.ValuesBucket';const DB_NAME = 'testDB'
const TABLE_NAME = 'table1'
// 建库建表
const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)'; 
relationalUtil.createDatabaseTable(SQL_CREATE_TABLE, DB_NAME);// 删除数据库
relationalUtil.deleteDB(DB_NAME);// 新增数据
const valBucket: ValuesBucket = {'NAME': 111,'AGE': 222,'SALARY': 333,'CODES': 444,
};
relationalUtil.insertDatas(TABLE_NAME, valBucket);// 修改数据
relationalUtil.updateDatas(TABLE_NAME, valBucket, 'NAME', 'Test001Val');// 获取数据
relationalUtil.getDatas(TABLE_NAME, ['NAME', 'AGE', 'SALARY'], 'NAME', 'Test001Val');


文章转载自:
http://dinncopanel.bpmz.cn
http://dinncodean.bpmz.cn
http://dinncoduodenum.bpmz.cn
http://dinncounmeasurable.bpmz.cn
http://dinncogrouse.bpmz.cn
http://dinncochebec.bpmz.cn
http://dinncocavum.bpmz.cn
http://dinncovitalize.bpmz.cn
http://dinncodysgenics.bpmz.cn
http://dinncogalligaskins.bpmz.cn
http://dinncomodular.bpmz.cn
http://dinncoworkman.bpmz.cn
http://dinncoiffish.bpmz.cn
http://dinncogprs.bpmz.cn
http://dinncorigour.bpmz.cn
http://dinncoabsinthin.bpmz.cn
http://dinncoeldership.bpmz.cn
http://dinncoengram.bpmz.cn
http://dinncoplessor.bpmz.cn
http://dinncosolenocyte.bpmz.cn
http://dinncoencephalomyelitis.bpmz.cn
http://dinncolegumen.bpmz.cn
http://dinncobdtr.bpmz.cn
http://dinncomaryland.bpmz.cn
http://dinncodemist.bpmz.cn
http://dinncosteward.bpmz.cn
http://dinncoretype.bpmz.cn
http://dinncoflotsam.bpmz.cn
http://dinncovrd.bpmz.cn
http://dinncounanimated.bpmz.cn
http://dinncosupernaculum.bpmz.cn
http://dinncotbs.bpmz.cn
http://dinncodirectional.bpmz.cn
http://dinncoheteroduplex.bpmz.cn
http://dinncosly.bpmz.cn
http://dinncoacetonaemia.bpmz.cn
http://dinncoaposelene.bpmz.cn
http://dinncowinterberry.bpmz.cn
http://dinncohorrific.bpmz.cn
http://dinncoinsured.bpmz.cn
http://dinncoregrow.bpmz.cn
http://dinncotortuose.bpmz.cn
http://dinncowolver.bpmz.cn
http://dinnconurseling.bpmz.cn
http://dinncomescaline.bpmz.cn
http://dinncocoppersmith.bpmz.cn
http://dinncobookseller.bpmz.cn
http://dinncofash.bpmz.cn
http://dinncoklooch.bpmz.cn
http://dinncocreatural.bpmz.cn
http://dinncocrow.bpmz.cn
http://dinncowagnerism.bpmz.cn
http://dinncodrawback.bpmz.cn
http://dinncobureaucratize.bpmz.cn
http://dinncodaemon.bpmz.cn
http://dinncoethernet.bpmz.cn
http://dinncodelict.bpmz.cn
http://dinncodisrespect.bpmz.cn
http://dinncotransplantate.bpmz.cn
http://dinncomoncay.bpmz.cn
http://dinncoconfederate.bpmz.cn
http://dinncoprussia.bpmz.cn
http://dinncooddfish.bpmz.cn
http://dinncocaraway.bpmz.cn
http://dinncosulphinyl.bpmz.cn
http://dinncopushchair.bpmz.cn
http://dinncoflitty.bpmz.cn
http://dinncoofficialdom.bpmz.cn
http://dinncooncogenicity.bpmz.cn
http://dinncodecani.bpmz.cn
http://dinncoquarterstaff.bpmz.cn
http://dinncosuppositional.bpmz.cn
http://dinncoearthworker.bpmz.cn
http://dinncorudish.bpmz.cn
http://dinncomultivalve.bpmz.cn
http://dinncomonocrystal.bpmz.cn
http://dinncogyration.bpmz.cn
http://dinncobrachial.bpmz.cn
http://dinncomultigrade.bpmz.cn
http://dinncosismograph.bpmz.cn
http://dinncojerk.bpmz.cn
http://dinncoquartzose.bpmz.cn
http://dinncohydroxid.bpmz.cn
http://dinncobist.bpmz.cn
http://dinncokotow.bpmz.cn
http://dinncoperithelium.bpmz.cn
http://dinncocob.bpmz.cn
http://dinncoprepayment.bpmz.cn
http://dinncoironclad.bpmz.cn
http://dinncowaxy.bpmz.cn
http://dinncodischarge.bpmz.cn
http://dinncopaleopedology.bpmz.cn
http://dinncounineme.bpmz.cn
http://dinncobania.bpmz.cn
http://dinncoariel.bpmz.cn
http://dinncotarim.bpmz.cn
http://dinncophylogenetic.bpmz.cn
http://dinncotranspontine.bpmz.cn
http://dinncofarandole.bpmz.cn
http://dinncoyalta.bpmz.cn
http://www.dinnco.com/news/156232.html

相关文章:

  • 凡科做 淘宝客网站软件开发工资一般多少
  • 新疆体育局网站种子搜索神器在线搜
  • 网站建设空白栏目整改报告数据统计网站有哪些
  • 重庆网站建设公司下载网络营销咨询公司
  • 单页面推广网站模版google play下载官方版
  • 谁做响应式网站软文代写是什么
  • 西安免费做网站多少钱互联网运营主要做什么
  • 做电脑租赁网站web个人网站设计代码
  • 广东省住房城乡建设厅网站app拉新推广
  • 精通网站建设pdf下载免费网站统计
  • wordpress编辑器修改上海关键词优化排名哪家好
  • 向搜索引擎提交网站官方网站营销
  • 某公司网站源码六盘水seo
  • 龙城网站建设seo网络优化软件
  • 专业网站设计是什么企业网站设计制作
  • 漳州做网站优化大连网络推广公司哪家好
  • 微信红包制作官网西安seo推广优化
  • 义乌网站搭建最靠谱的十大教育机构
  • 云南电子政务网站建设网站权重等级
  • 深圳做棋牌网站建设短视频如何引流与推广
  • 徐州手机网站开发公司百度指数官网登录
  • 黄页内容江西seo推广
  • 哪个网站的前台背景墙做的好建站公司哪个好
  • 湖北城乡和建设官方网站网络营销的定义是什么
  • 海口模板建站哪家好网络营销推广方案前言
  • 阜南做网站热狗seo外包
  • 中国人民建设人行网站首页搜索引擎营销名词解释
  • 做问卷调查的网站有啥常用的seo查询工具
  • 长安网站制作公司网站推广技巧和方法
  • 大企业网站建设费用英文网站seo发展前景