栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

鸿蒙开发两种简单本地数据库RDB和ORM的入门demo以及配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

鸿蒙开发两种简单本地数据库RDB和ORM的入门demo以及配置

DevEco studio 简单数据库

新手最近刚开始学鸿蒙开发,到数据库这里也查了挺多资料的,查完也挺恼火的,五六个内容基本完全相同的文章作者都加了自己原创然后一贴,细节也什么都不说,这里我今天搞懂了一些,希望对像我这样的初学者有一些帮助,少走一些弯路。

两种本地数据库创建方式 鸿蒙官网样例Demo(rdbdatabase 关系型数据库)
package com.example.rdbdatabase;

import com.example.rdbdatabase.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.data.DatabaseHelper;
import ohos.data.distributed.common.Query;
import ohos.data.rdb.*;
import ohos.data.resultset.ResultSet;

import javax.security.auth.callback.CallbackHandler;
import java.util.function.Predicate;

public class MainAbility extends Ability {
    RdbOpenCallback callback = new RdbOpenCallback() {
        @Override
        public void onCreate(RdbStore rdbStore) {
            rdbStore.executeSql("CREATE TABLE IF NOT EXISTS rdbdemo "+
            "(ID INTEGER PRIMARY KEY,name TEXT NOT NULL,age INTEGER NOT NULL)");
        }

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

        }
    };
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
        StoreConfig config = StoreConfig.newDefaultConfig("demo.db"); //配置数据库信息,该处采用默认。
        DatabaseHelper helper = new DatabaseHelper(this);   //我理解是一个生成操作数据库的对象,核心
        //通过helper对象找到数据库,若没有则创建,在创建数据库时回调 用于数据库中表的初始化
        RdbStore rdbStore = helper.getRdbStore(config, 1, callback, null);

        //插入数据
        this.rdb_insert(1,"zhang_san",20,rdbStore);
        this.rdb_insert(3,"li_si",27,rdbStore);
        this.rdb_insert(7,"wang_wu",33,rdbStore);

        //查询数据
        //两种方式,接口提供了使用原始的sql语句以及通过”谓词“的方式
        //原始sql语句
        System.out.println("下面通过原始sql语句的方式");
        ResultSet resultSet = rdbStore.querySql("select id,name from rdbdemo where age>? order by ID desc", new String[]{"25"});

        if(resultSet ==null)System.out.println("failed to query!");
        for(int i=0;i 

运行结果如下:

第二种数据库模板(ormdatabase对象关系映射数据库)

说句实话,昨天在CSDN上看到的几篇重复文章都是只讲的这里还有问题,所以我把我遇到的问题详细解决一下,供大家参考

这里用到了注解处理器。
这里不多赘述,直接上链接
java注解和注解处理器使用

鸿蒙开发工具也支持注解
但是需要提前配置,其他文章都是单纯告诉参数应该怎么写,并没有教配置,让新手很困惑,这里我给大家说一下

要在本模块(即entry)模块下的build,gradle配置文件中配置参数打开注解处理器
即下面这段参数
compileOptions{
annotationEnabled true
}
添加在如下位置

ohos {
    compileSdkVersion 6
    defaultConfig {
        compatibleSdkVersion 6
    }
    compileOptions{
        annotationEnabled true
    }


    buildTypes {
        release {
            proguardOpt {
                proguardEnabled false
                rulesFiles 'proguard-rules.pro'
            }
        }
    }
    
}

随后这里许多文章没有提供。
为了可以识别注解还需要添加相关的架包的依赖
也是在该文档中

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路径")
    }

将上面这段配置添加到下面的位置
其中路径需要自己替换一下
这些依赖都在DevEco安装目录下的SDK的java目录下的位置,可以通过搜索找到

ohos {
    compileSdkVersion 6
    defaultConfig {
        compatibleSdkVersion 6
    }
    compileOptions{
        annotationEnabled true
    }
    
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
    testImplementation 'junit:junit:4.13'
    ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.200'

    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路径")
}

对象映射数据库的数据库和表的设计如下

//数据库
package com.example.ormdatabase.db;


import com.example.ormdatabase.db.table.User;
import ohos.data.orm.OrmDatabase;
import ohos.data.orm.annotation.Database;

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

package com.example.ormdatabase.db.table;

import ohos.data.orm.OrmObject;
import ohos.data.orm.annotation.Entity;
import ohos.data.orm.annotation.Index;
import ohos.data.orm.annotation.PrimaryKey;

@Entity(tableName = "user") //这里也可以添加索引,这里我简单处理
public class User extends OrmObject {
    @PrimaryKey //将ID设置为主键
    private Integer ID;
    private String name;
    private Integer age;


    public Integer getID() {
        return ID;
    }

    public void setID(Integer ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

开发者可通过创建一个继承了OrmObject并用@Entity注解的类,获取数据库实体对象,也就是表的对象。数据表必须与其所在的数据库在同一个模块中。
注解对照表

接口名称描述
@Database被@Database注解且继承了OrmDatabase的类对应数据库类。
@Entity被@Entity注解且继承了OrmObject的类对应数据表类
@Column被@Column注解的变量对应数据表的字段。
@PrimaryKey被@PrimaryKey注解的变量对应数据表的主键。
@ForeignKey被@ForeignKey注解的变量对应数据表的外键。
@Index被@Index注解的内容对应数据表索引的属性。
package com.example.ormdatabase.slice;

import com.example.ormdatabase.ResourceTable;
import com.example.ormdatabase.db.User_db;
import com.example.ormdatabase.db.table.User;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.data.DatabaseHelper;
import ohos.data.distributed.common.Query;
import ohos.data.orm.OrmContext;
import ohos.data.orm.OrmPredicates;

import java.util.List;
import java.util.function.Predicate;


public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //ormContext为对象数据库的操作接口,之后的增删等操作都是通过该对象进行操作
        DatabaseHelper helper = new DatabaseHelper(this);

        OrmContext ormContext = helper.getOrmContext("User_db", "Userdemo.db", User_db.class);
        this.my_insert(1,"zhang_san",24,ormContext);
        this.my_insert(2,"li_si",27,ormContext);
        this.my_insert(3,"wang_wu",37,ormContext);
        OrmPredicates ormPredicates = ormContext.where(User.class).greaterThan("age", 25).orderByDesc("id");
        List users = ormContext.query(ormPredicates);
        for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号