前言

上文介绍了ObjectBox,属于神器,但是作为一个合格的码农,上的了厅堂,下得了猪圈,神器好用,菜刀也是要会使的嘛,这篇我们就来介绍下鸿蒙系统的数据库如何使用

鸿蒙的关系型数据库是基于SQLite的实现,官方提供了关系型数据库实现和基于对象的关系型数据库两种数据库操作,本文会指导大家如何分别使用这两种数据库操作,来对数据库进行简单的CRUD操作。

关系型数据库

关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。HarmonyOS关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。运作机制如图:

image.png

1、创建数据库

//设置数据库为RdbStore.db

StoreConfig config = StoreConfig.newDefaultConfig("RdbStore.db");

DatabaseHelper helper = new DatabaseHelper(getContext());

RdbStore rdbStore = helper.getRdbStore(config, 1, new RdbOpenCallback() {

@Override

public void onCreate(RdbStore rdbStore) {

//创建表

rdbStore.executeSql("create table if not exists User(userId integer primary key autoincrement,userName text)");

//更多建表语句可以在这里写

}

@Override

public void onUpgrade(RdbStore rdbStore, int i, int i1) {

//升级数据库操作

}

});

2、插入数据

//使用键值对方式插入数据库rdbCreateDb()获取的就是创建的时候生成的rdbStore

ValuesBucket values = new ValuesBucket();

values.putInteger("userId",1);

values.putString("userName","name1");

long id = rdbCreateDb().insert("User",values);

//使用最原始的sql语句插入数据

rdbCreateDb().executeSql("insert into User (userId,userName) values (2,'name2')");

3、删除数据

RdbPredicates rdbPredicates = new RdbPredicates("User").equalTo("userName","name1");

int i = rdbCreateDb().delete(rdbPredicates);

4、查询数据

String[] columns = new String[]{"userId","userName"};

RdbPredicates rdbPredicates = new RdbPredicates("User");//构建查询谓词

ResultSet resultSet = rdbCreateDb().query(rdbPredicates,columns);

while (resultSet.goToNextRow()){

int userId = resultSet.getInt(resultSet.getColumnIndexForName("userId"));

String userName = resultSet.getString(resultSet.getColumnIndexForName("userName"));

HiLog.warn(new HiLogLabel(HiLog.LOG_APP, 0, "===demo==="), "查询到userId=" + userId + " userName=" +userName);

}

5、修改数据

RdbPredicates rdbPredicates = new RdbPredicates("User").equalTo("userName","name2");

ValuesBucket values = new ValuesBucket();

values.putString("userName","name3");

//更新数据

rdbCreateDb().update(values,rdbPredicates);

增删改查操作都可以通过rdbStore的executeSql方法,直接执行sql语句执行。语句语法采用SQLite的语法。

对象关系型数据库

HarmonyOS对象关系映射(Object Relational Mapping,ORM)数据库是一款基于SQLite的数据库框架,屏蔽了底层SQLite数据库的SQL操作,针对实体和关系提供了增删改查等一系列的面向对象接口。应用开发者不必再去编写复杂的SQL语句, 以操作对象的形式来操作数据库,提升效率的同时也能聚焦于业务开发。运作机制如图:

image1.png

1、环境配置

1、添加相应的jar包到模块libs里面,相关文件可以在demo中找到。

image2.png

2、在模块的build.gradle中的对应添加注解引用

//开启注解

ohos {

compileOptions {

annotationEnabled true

}

}

//添加注解处理引用

dependencies {

annotationProcessor files("./libs/orm_annotations_java.jar", "./libs/orm_annotations_processor_java.jar")

}

2、初始化数据库配置

1、新建数据库实现类

//entities里放置的是表对应的javabean,version对应数据库版本

@Database(entities = {OrmUser.class}, version = 1)

public abstract class OrmDBTest extends OrmDatabase {

@Override

public RdbOpenCallback getHelper() {

return new RdbOpenCallback() {

@Override

public void onCreate(RdbStore rdbStore) {

//创建成功后执行操作

}

@Override

public void onUpgrade(RdbStore rdbStore, int oldVersion, int newVersion) {

//数据库升级需要执行的操作

}

};

}

}

2、新建表对应的JavaBean

//对应的数据库表名写在注解里,另外记得get/set要写齐全

@Entity(tableName = "OrmUser")

public class OrmUser extends OrmObject {

@PrimaryKey(autoGenerate = true)

private int id;

private int userId;

private String userName;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public int getUserId() {

return userId;

}

public void setUserId(int userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

}

3、ORM对数据库的基本操作

1、创建数据库上下文操作对象

private OrmContext ormCreateDb() {

DatabaseHelper databaseHelper = new DatabaseHelper(getContext());

OrmContext ormContext = databaseHelper.getOrmContext("OrmDBTest", "OrmDBTest.db", OrmDBTest.class);

return ormContext;

}

2、增

OrmUser ormUser = new OrmUser();

ormUser.setUserId(1);

ormUser.setUserName("name1");

boolean isSuccess = ormCreateDb().insert(ormUser);

ormCreateDb().flush();

3、查

//查询userId = 1的数据

OrmPredicates ormPredicates = ormCreateDb().where(OrmUser.class).equalTo("userId","1");

List ormUsers = ormCreateDb().query(ormPredicates);

4、改

//将查询出来的数据值修改后更新到数据库

OrmUser ormUser = ormQuery();

if (ormUser == null){

return;

}

ormUser.setUserName("name2");

ormCreateDb().update(ormUser);

ormCreateDb().flush();

5、删

//将查询出来的数据值从数据库中删除

OrmUser ormUser = ormQuery();

if (ormUser == null){

return;

}

ormCreateDb().delete(ormUser);

ormCreateDb().flush();

总结

数据库中连接池的最大数量是4个,同一时间只能支持一个写操作!对象关系型数据的数据库类型只支持基础数据类型及Date、Time、Timestamp、Calendar、Blob(二进制大对象)、Clob(字符大对象)

文中相关的代码在git:https://github.com/maolinnan/HarmonyosClass

这是本系列的第五篇,后面还会为大家带来更多的鸿蒙干货,敬请期待......。

如果文章对您有一点启发的话,希望您能点个赞,来一波关注。

鸿蒙系统开发者如何加入,鸿蒙开发实战系列之五:鸿蒙系统原生数据库相关推荐

  1. 鸿蒙开发实战系列之五:鸿蒙系统原生数据库

    鸿蒙开发实战系列之一:鸿蒙开发实战系列之一:圆角 鸿蒙开发实战系列之二:鸿蒙开发实战系列之二:事件总线EventBus/RxBus 鸿蒙开发实战系列之三:鸿蒙开发实战系列之三:网络请求(原生+ Ret ...

  2. 鸿蒙开发实战系列之三:网络请求(原生+ Retrofit)

    鸿蒙开发实战系列之一:鸿蒙开发实战系列之一:圆角 鸿蒙开发实战系列之二:鸿蒙开发实战系列之二:事件总线EventBus/RxBus 前言 过了一个漫长的中秋+国庆假期,大家伙的鸿蒙内功修炼的怎么样了? ...

  3. 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...

    主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...

  4. 微信小程序|开发实战篇之五-slide-view滑动菜单组件

    开发实战篇之五 前言 1.微信小程序操作dom元素 1.1 slide-view组件的wxml骨架文件 1.1.1 涉及movable-view组件属性 1.2 slide-view组件的js文件 1 ...

  5. SSM实战系列之商城系统(前端+后台)《一》项目需求分析

    SSM实战系列之商城系统(前端+后台)<一> 1. 前言 这是一个电子商城整站的实战项目,包括前端的整体页面和后台管理页面. 从项目需求分析到整站开发的一整套项目开发过程记录. 也是作为本 ...

  6. [Map 3D开发实战系列] Map Resource Explorer 之四-- Map3D开发中的WPF

    目录 [Map 3D开发实战系列] Map Resource Explorer 背景介绍--Kick off [Map 3D开发实战系列] Map Resource Explorer 之二-- 运行和 ...

  7. springboot 事务统一配置_Spring Boot实现分布式微服务开发实战系列(五)

    最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...

  8. springboot 插入返回id_Spring Boot实现分布式微服务开发实战系列(七)

    今天已经进入第七讲了,整个微服务架构的搭建工作也基本完成.那到目前为止究竟使用了那些技术及实现了什么功能呢?我们先回顾一下. 使用的技术:SpringBoot.Dubbo.Zookeeper.Redi ...

  9. WCF开发实战系列四:使用Windows服务发布WCF服务

    WCF开发实战系列四:使用Windows服务发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇文章中我们通过编写的控制台程序或WinForm程序来为本 ...

最新文章

  1. Notepad++支持jQuery、html5、css3
  2. docker远程访问TLS证书认证shell
  3. 与虫子尾交3d动画网站_PPT中最酷的效果 —— 3D模型全解
  4. 【haproxy初始化】init_haproxy.sh
  5. ABAP中的动态运算函数
  6. 【Git】git stash应用场景
  7. 递归调用cl_crm_oi_docx_transform_rt=process_node_cc
  8. 数字图像处理--图像旋转变换的推导
  9. js 的prototype 属性和用法,外加__proto__
  10. python编程考试_《Python程序设计》试题库
  11. 在Visio里加上、下标方法
  12. 概率论与数理统计 习题篇
  13. 电脑f2还原系统步骤_电脑还原系统方法步骤详解
  14. 软件的高可用性、可扩展性和高性能
  15. 计算机在bios设置用u盘启动不,bios设置u盘启动图解
  16. 用极限定义证明微积分基本定理
  17. 我对TCP协议的一点形而上的看法
  18. 虚拟机挂载ISO文件
  19. Assertion-Based Verification01-----Introduction to OVL
  20. 安装npm和cnpm

热门文章

  1. Tensorflow安装GPU环境
  2. python并发编程之多进程、多线程、异步和协程
  3. 小程序问题记录:小程序云开发获取不到数据库的记录
  4. Google最热开源项目
  5. @SpringBootApplication
  6. Eclipse 各种小图标的含义
  7. C# LINQ to XML
  8. RDL(C) Report Design Step by Step 3: Mail Label
  9. Newtonsoft.Json.dll 使用
  10. 漫步数理统计三十三——采样与统计量