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

前言

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

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

关系型数据库

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

8eda7b0e9cdd

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语句, 以操作对象的形式来操作数据库,提升效率的同时也能聚焦于业务开发。运作机制如图:

8eda7b0e9cdd

image1.png

1、环境配置

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

8eda7b0e9cdd

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值