数据持久化-关系型数据库

news/2024/10/6 2:58:51/文章来源:https://www.cnblogs.com/okcbatter/p/18286991

基于SQLite组件提供的本地数据库,用于管理应用中的结构化数据

用户首选项只能在轻量级数据中进行数据持久化,复杂的数据就需要用到关系型数据库

三步使用:1.初始化数据库 2.增删改数据 3.查询数据

1.初始化数据库

1)导入关系型数据库模块

import relationalStore from '@ohos.data.relationalSore';

2)  初始化数据库表

//rdb配置
const config = {name: 'MyApplication.db',//数据库文件名securityLevel: relationalSore.SecurityLevel.S1 //数据库安全级别
}
//初始化表的SQL
const sql = 'CREATE TABLE IF NOT EXISTS TASK (
                  ID INTEGER PRIMARY KEY,NAME TEXT NOT NULL,FINISHED bit) '    
//获取rdb
relationalStore.getRbdStore(this.context, config,(err, rdbStore) => {//执行SQL,后续的所有增删改查都是使用rdbStore对象
  rdbStore.executeSql(sql)
})
可以把rdb抽取为成员变量供下面重复使用
private rdbStore:relationalStore.RdbStore
保存rdbStore
this.rdbStore = rdbStore

 2.增删改数据

1)新增数据

//准备数据
let task = {id: 1, name:'任务1',finished:false};
//新增
this.rdbStore.insert(this.tableName,  task)

2)修改数据

//要更新的数据
let task = {'finished' : true};
//查询条件,RdbPredicates就是条件谓词
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('ID', id)
//执行更新
this.rdbStore.update(task,predicates)

3)删除数据

//查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('ID', id)
//执行删除
this.rdbStore.delete(predicates)

3.查询数据

1)查询数据

//查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
//执行查询
let result = await this.rdbStore.query(predicates,['ID','NAME','FINISHED'])

查询是异步的,需要await等待,返回的是promise类型的result结果集,需要进行解析

2)解析结果

//准备数组保存结果
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,finished: !!finished})
}
拿到的finished结果需要转化为布尔类型所以要用!!finished来转化
假如finished=0, !finished=!0=1=true,!!finished=!true=false,这样就把0转化为false了

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739444.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题目集7~8

由于个人原因,最后两次题目集未提交,对自己的放纵感到愧疚,后期的补练我也会抽出时间完成这两道题 经过分析,题目集7,是在前面的基础上加上了一个新概念:互斥开关,以及模拟一种受控窗帘, 在我的想法,互斥开关便可当作两个普通开关去完成电路,窗帘则是新增一个用电器。…

EtherCAT转Profinet网关配置说明第一讲:配置软件安装及介绍

网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议和Profinet协议两种工业实时以太网网络之间双向传输 IO 数据。适用于具有EtherCAT协议网络与Profinet协议网络跨越网络界限进行数据交换的解决方案。 网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议…

4、flask-项目拆分

项目的拆分其实就是将app.py中的工作拆分开来、类似Django一样、每个项目都把路由模板和试图函数分开写 app.py # 路由 + 视图函数from flask import Blueprint from models import *#蓝图 # 创建蓝图对象 # 第一个参数:蓝图的名字 # 第二个参数:蓝图的包名 blue = Blueprin…

2-SAT 问题

2-SAT 问题 模型有 \(n\) 个布尔类型的变量 \(x_1, x_2, \ldots, x_n\),有 \(m\) 条限制形如 \(x_i \space [\operatorname{or}/\operatorname{and}]\space x_j=[1/0]\). 求一组符合要求的解。核心问题只需要考虑有没有解。 对于每个变量都只有两种取值:\(0/1\),那么把每…

坚果云与floccus实现Chrome书签国内跨设备、跨平台同步

本文介绍基于floccus插件与坚果云协同使用的方法,对浏览器的书签进行实时在线同步的操作~本文介绍基于floccus插件与坚果云协同使用的方法,对浏览器的书签进行实时在线同步的操作。在工作与学习中,我们时常希望在不同浏览器之间实现书签的同步;而一些传统的浏览器书签同步方…

性能监控调优

1.命令行工具 1.1 jps 查看系统JVM进程 jps [options] [hostid]optionhostid:省略则本机,监控远程需要安装jstatd1.2 jstat 查看JVM统计信息 jstat -[-t] [-h] [[]]option-t:加程序运行时间 [-h]:输出设定行数加表头信息 :查询间隔时间 count:查询总次数 结果:当ou上涨趋…

【第7个渗透靶机项目】 DerpNStink

Hack it 信息搜集 发现主机 nmap 192.168.0.17 -sS -sV -A -T5 全面扫描一下,有点有用信息访问一下但是没有用。 访问一下http服务查看源代码,发现有文件泄露下面还有个flag查看info.txt。<-- @stinky,确保使用本地 dns 更新您的主机文件,以便可以在新的 derpnstink 博客…

Linux运维工程师推荐学习的开发语言

前言:会开发的运维和不会开发的运维可以说是两个世界的运维。 个人推荐python和go,前者可以做自动化运维,后者可以深挖k8s;最近就不先演示运维服务技术的部署和架构搭建了,在深挖自动化运维,为了让现在的工作更加高效和便捷。如果有需要了解的运维服务技术,可以评论说出…

2、flask-run启动参数详解

app.py 这里 app.run(True, port=5001, host=0.0.0.0) from flask import Flask#创建flask应用对象 app = Flask(__name__)@app.route(/) # 路由 def hello_world(): # 视图函数return Hello World! # 响应给前端#添加路由和视图函数 @app.route(/index/) def index():…

从零学习的JAVAday1~day7

作为一个刚要迈入大二的预备程序员,已经学习过了c语言和c++的部分知识,在暑假期间满怀期待的开始Java的学习,希望一个暑假可以对Java的了解加深一些。 学习Java首先要学习windows电脑的cmd命令: 同时点击键盘上面的win+r键输入cmd即可进入默认的cmd面版,然后我们就可以输入…

面试官:Java线程可以无限创建吗?

哈喽,大家好🎉,我是世杰。 ⏩本次给大家介绍一下操作系统线程和Java的线程以及二者的关联1. 面试连环callJava线程可以无限创建吗? Java线程和操作系统线程有什么关联? 操作系统为什么要区分内核态和用户态?⏩要想解答这些问题,我们要先从操作系统线程开始说起,让我们…

标准IO与系统IO

C平台的标准IO(可跨系统)Linux 系统IO (Linux系统平台才能使用)Linux系统的IO(输入输出)特点主要包括以下几个方面 1)文件视为一切:在Linux中,几乎所有的设备和资源都被视为文件。这意味着无论是硬件设备(如磁盘、网络接口)还是系统资源(如进程、内存),它们都可以通…