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


