9

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

 3 years ago
source link: https://my.oschina.net/u/4664563/blog/4871210
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

鸿蒙开发实战系列之一:鸿蒙开发实战系列之一:圆角

鸿蒙开发实战系列之二:鸿蒙开发实战系列之二:事件总线EventBus/RxBus

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

鸿蒙开发实战系列之四:鸿蒙开发实战系列之四:数据库NoSQL-ObjectBox的使用

上文介绍了ObjectBox,属于神器,但是作为一个合格的码农,上的了厅堂,下得了猪圈,神器好用,菜刀也是要会使的嘛,这篇我们就来介绍下鸿蒙系统的数据库如何使用 鸿蒙的关系型数据库是基于SQLite的实现,官方提供了关系型数据库实现和基于对象的关系型数据库两种数据库操作,本文会指导大家如何分别使用这两种数据库操作,来对数据库进行简单的CRUD操作。

关系型数据库

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

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

1、环境配置

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

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;
}
OrmUser ormUser = new OrmUser();
ormUser.setUserId(1);
ormUser.setUserName("name1");
boolean isSuccess = ormCreateDb().insert(ormUser);
ormCreateDb().flush();
//查询userId = 1的数据
OrmPredicates ormPredicates = ormCreateDb().where(OrmUser.class).equalTo("userId","1");
List<OrmUser> ormUsers =  ormCreateDb().query(ormPredicates);
//将查询出来的数据值修改后更新到数据库
OrmUser ormUser = ormQuery();
if (ormUser == null){
    return;
}
ormUser.setUserName("name2");
ormCreateDb().update(ormUser);
ormCreateDb().flush();
//将查询出来的数据值从数据库中删除
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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK