基于 OpenHarmony ActiveOhos_sqllite 组件开发指南

2024-04-07 22:44

本文主要是介绍基于 OpenHarmony ActiveOhos_sqllite 组件开发指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. ActiveOhos 功能介绍

1.1.组件介绍

基于鸿蒙系统连接数据库进行 sqlite 数据库操作的时候,创建连接的时候是有些繁琐的,本组件就是为了简化 sqlite 的连接,并且对鸿蒙原生的 API 进行封装加强,使得读写 sqlite 数据库的时候更加方便

1.2. phone 模拟器上运行效果

插入数据成功

2. ActiveOhos 使用方法

2.1.为应用添加 sqlitelibrary-debug.har 包依赖
在应用模块中调用 HAR,常用的添加依赖的方式包括如下两种。

方式一:依赖本地 HAR

第 一 步 : 将 sqlitelibrary-debug.har 复 制 到 entry\libs 目 录 下 即 可 ( 由 于
build.gradle 中已经依赖的 libs 目录下的
.har,因此不需要在做修改)。
*

查看工程目录中 build.gradle 下的*.har 是存在

第二步:除了依赖以上 har 之外还需要添加外部依赖用来实现类的引入,引入方式如下,引入完之后同步下就可以使用。

  • 如果使用注解处理器的模块为“com.huawei.ohos.hap”模块,则需要在模块的 “build.gradle”文件的“ohos”节点中添加以下配置:
compileOptions{
annotationEnabled true
}
  • 如果使用注解处理器的模块为“com.huawei.ohos.library”模块,则需要在模块的 “build.gradle”文件的“dependencies”节点中配置注解处理器。查看 “orm_annotations_java.jar”、
    “orm_annotations_processor_java.jar”、“javapoet_java.jar”这 3 个jar 包在 HUAWEI SDK 中的对应目录,并将目录的这三个 jar 包导进来。
dependencies { compile files("orm_annotations_java.jar 的路径
","orm_annotations_processor_java.jar 的路径","javapoet_java.jar 的
路径") annotationProcessor files("orm_annotations_java.jar 的路径
","orm_annotations_processor_java.jar 的路径","javapoet_java.jar 的
路径")}
  • 如果使用注解处理器的模块为“java-library”模块,则需要在模块的 “build.gradle”文件的“dependencies”节点中配置注解处理器,并导入“ohos.jar”。
dependencies { compile files("ohos.jar 的路径
","orm_annotations_java.jar 的路径
","orm_annotations_processor_java.jar 的路径","javapoet_java.jar 的
路径") annotationProcessor files("orm_annotations_java.jar
的路径","orm_annotations_processor_java.jar 的路径
","javapoet_java.jar 的路径")}

比如:

以上操作无误之后就可以进行编码了!

3. ActiveOhos 开发实现

3.1.主页面的布局文件

定义四个按钮分别实现增删改查,定义四个 Button 实现请求点击事件

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">
<Button
ohos:id="$+id:btn_insert"
ohos:height="match_content"
ohos:width="80fp"
ohos:text_color="red"
ohos:text="插入"
ohos:text_size="20fp"
ohos:weight="100fp"/>
<Button
ohos:id="$+id:btn_query"
ohos:height="match_content"
ohos:width="100fp"
ohos:text_color="blue"
ohos:text="查询"
ohos:text_size="20fp"
ohos:weight="100fp"/>
<Button
ohos:id="$+id:btn_update"
ohos:height="match_content"
ohos:width="100fp"
ohos:text_color="green"
ohos:text="更新"
ohos:text_size="20fp"
ohos:weight="100fp"/>
<Button
ohos:id="$+id:btn_delete"
ohos:height="match_content"
ohos:width="100fp"
ohos:text_color="black"
ohos:text="删除"
ohos:text_size="20fp"
ohos:weight="100fp"/>
<ListContainer
ohos:id="$+id:listText"
ohos:height="match_parent"
ohos:width="match_parent"/>
</DirectionalLayout>
ohos:width="match_content"
ohos:background_element="$graphic:background_ability_main"
ohos:layout_alignment="horizontal_center"
ohos:text="get 请求"
ohos:text_size="50"
ohos:top_margin="80vp"
/>
</DirectionalLayout>

3.2.例子代码如下

组件中一共有两种连接数据的方式,分别 OrmContext,RdbStore ,其中 OrmContext 是需要定义一个实体类(User)来和数据库对应表名及字段,还有一个数据库类 BookStore 来配合开发代码如下:

MainAbilitySlice

import com.example.myapplication.BookStore;
import com.example.myapplication.ResourceTable;
import com.example.myapplication.User;
import com.example.sqlitelibrary.DBManage;
import com.example.sqlitelibrary.DBOrmContext;
import com.example.sqlitelibrary.utils.Log;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.data.DatabaseHelper;
import ohos.data.orm.OrmContext;
import ohos.data.orm.OrmPredicates;
import ohos.data.rdb.RdbStore;
import ohos.data.rdb.ValuesBucket;
import java.util.ArrayList;
import java.util.List;
public class MainAbilitySlice extends AbilitySlice implements
Component.ClickedListener {
private DatabaseHelper helper;
private RdbStore store;
private OrmContext context;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
helper = new DatabaseHelper(this);
DBManage dbManger = new DBManage("user.db","user");
context = dbManger.getConnectionContext(helper, BookStore.class);
// DBManage dbManger = new DBManage("user.db");
// store = dbManger.getConnectionStore(helper,"user");
Button btnInsert = (Button) findComponentById(ResourceTable.Id_btn_insert);
Button btnQuery = (Button) findComponentById(ResourceTable.Id_btn_query);
Button btnDelete = (Button) findComponentById(ResourceTable.Id_btn_delete);
Button btnUpdate = (Button) findComponentById(ResourceTable.Id_btn_update);
btnInsert.setClickedListener(this::onClick);
btnQuery.setClickedListener(this::onClick);
btnDelete.setClickedListener(this::onClick);
btnUpdate.setClickedListener(this::onClick);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
public void onClick(Component component) {
// RdbStoreManage rdbStoreMange = new RdbStoreManage();
// ValuesBucket values = new ValuesBucket();
// values.putInteger("id", 1);
// values.putString("name", "zhangsan");
// values.putInteger("age", 18);
// values.putDouble("salary", 100.5);
// values.putByteArray("blobType", new byte[] {1, 2, 3});
// rdbStoreMange.setSql(store, "insert into user values(zhangsan, 18, 100.5,
byte[1,2,3])");
// long id = rdbStoreMange.insert(store,"user", values);
// System.out.println(id);
DBOrmContext dbOrmContext = new DBOrmContext();
switch (component.getId()) {
case ResourceTable.Id_btn_insert: //插入数据
//第一次使用 user 对应的表的时候,如果有这张表就直接使用,没有就创建表
User user = new User();
user.setFirstName("Zhang");
user.setLastName("San");
user.setAge(29);
user.setBalance(100.51);
boolean b = dbOrmContext.insert(context, user);
Log.i("插入成功");
System.out.println(b);
break;
case ResourceTable.Id_btn_query: //条件查询
List<User> users = new ArrayList<>();
OrmPredicates query = context.where(User.class).equalTo("lastName",
"San");
users = dbOrmContext.query(context, query);
break;
case ResourceTable.Id_btn_delete: //条件删除
OrmPredicates delete = context.where(User.class).equalTo("lastName", "San");
int delete1 = dbOrmContext.delete(context, delete);
System.out.println(delete1);
break;
case ResourceTable.Id_btn_update: //条件更新
ValuesBucket valuesBucket = new ValuesBucket();
valuesBucket.putInteger("age", 31);
valuesBucket.putString("firstName", "Zhang");
valuesBucket.putString("lastName", "San");
valuesBucket.putDouble("balance", 300.51);
OrmPredicates update = context.where(User.class).equalTo("userId",
1);
int update1 = dbOrmContext.update(context, valuesBucket, update);
System.out.println(update1);
break;
}
dbOrmContext.flush(context);
}
}

user.java

@Entity(tableName = "user", ignoredColumns = {"ignoreColumn1",
"ignoreColumn2"},
indices = {@Index(value = {"firstName", "lastName"}, name =
"name_index", unique = true)})
public class User extends OrmObject {
// 此处将 userId 设为了自增的主键。注意只有在数据类型为包装类型时,自增主键才
能生效。
@PrimaryKey(autoGenerate = true)
private Integer userId;
private String firstName;
private String lastName;
private int age;
private double balance;
private int ignoreColumn1;
private int ignoreColumn2;
// 开发者自行添加字段的 getter 和 setter 方法

BookStore.java

@Database(entities = {User.class}, version = 1)
public abstract class BookStore extends OrmDatabase {
}

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

这篇关于基于 OpenHarmony ActiveOhos_sqllite 组件开发指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883881

相关文章

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O