HarmonyOS基础技术赋能之对象关系映射数据库的使用 原创 精华
引言
HarmonyOS对象关系映射(Object Relational Mapping,ORM)数据库是一款基于SQLite的数据库框架,屏蔽了底层SQLite数据库的SQL操作,针对实体和关系提供了增删改查等一系列的面向对象接口。应用开发者不必再去编写复杂的SQL语句, 以操作对象的形式来操作数据库,提升效率的同时也能聚焦于业务开发。
功能介绍
对象关系映射数据库目前可以支持数据库和表的创建,对象数据的增删改查、对象数据变化回调、数据库升降级和备份等功能。
开发指南
1. 配置“build.gradle”文件。
//在ohos节点中添加以下配置:
compileOptions{
annotationEnabled true
}
2. 构造数据库。
//例如,定义了一个数据库类BookStore.java,数据库包含了“User”一张表,版本号为“1”。数据库类的getVersion方法和getHelper方法不需要实现,直接将数据库类设为虚类即可。
@Database(entities = {User.class}, version = 1)
public abstract class BookStore extends OrmDatabase {
}
3.构造数据表。
//创建数据库实体类并配置对应的属性(如对应表的主键,外键等
4. 使用对象数据操作接口OrmContext创建数据库。
5. 使用对象数据操作接口OrmContext对数据库进行增删改查、注册观察者、备份数据库等。
1)首先需要创建一个DataAbility. 右键项目包名→New→Ability→Empty Data Ability,点击进入configure Ability,然后自己定义Data Name,例如:UserDataAbilty。
2)然后在UserDataAbilty类中重写增删改查的方法:
6.在需要调用的地方,例如MainAbilitySlice中,先创建DataAbilityHelper 对象,然后调用DataAbilityHelper的增、删、改、查方法。
操作步骤
App打开之后:
1.点击QueryAll时,打印的log。(查询插入的“ZhangSan”、“LiSi”)
08-25 15:50:00.966 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=1; userName=ZhangSan; userAge=22; userRole=teacher
08-25 15:50:00.967 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=2; userName=LiSi; userAge=23; userRole=programmer
2.点击QueryByCondition时,打印的log。(条件查询“userRole=programmer”)
08-25 15:51:29.031 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=2; userName=LiSi; userAge=23; userRole=programmer
3.点击Insert后,再点击QueryAll时,打印的log。(插入“WangWu”)
08-25 15:52:26.426 10496-10496/com.isoftstone.ormdatebase D 01100/Demo: success to insert id=3
08-25 15:52:31.466 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=1; userName=ZhangSan; userAge=22; userRole=teacher
08-25 15:52:31.466 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=2; userName=LiSi; userAge=23; userRole=programmer
08-25 15:52:31.467 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=3; userName=WangWu; userAge=18; userRole=police
4.点击Update后,再点击QueryAll时,打印的log。(把“WangWu”修改为“ZhaoLiu”)
08-25 15:53:42.641 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: UserDataAbility success to update value:1
08-25 15:53:42.643 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: 1
08-25 15:54:35.062 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=1; userName=ZhangSan; userAge=22; userRole=teacher
08-25 15:54:35.063 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=2; userName=LiSi; userAge=23; userRole=programmer
08-25 15:54:35.063 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=3; userName=ZhaoLiu; userAge=26; userRole=doctor
5.点击Delete后,在点击QueryAll时,打印的log。(删除“ZhaoLiu”)
08-25 15:55:26.885 10496-10496/com.isoftstone.ormdatebase D 01100/Demo: UserDataAbility success to delete value=1
08-25 15:55:29.157 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=1; userName=ZhangSan; userAge=22; userRole=teacher
08-25 15:55:29.158 10496-10496/com.isoftstone.ormdatebase I 01100/Demo: userId=2; userName=LiSi; userAge=23; userRole=programmer
提供源码
1. BookStore
2. User
3. UserDataAbility
4. MainAbilitySlice
5. 页面布局ability_main.xml文件:
6.圆角背景图形background_button.xml文件:
7.config.json
8.build.gradle
更多原创内容请关注:软通动力HarmonyOS学院
张老师更新的好快
张老师文章版面工整,内容详细
张老师加油
学习学习
张老师加油
感谢张老师分享
感谢张老师分享
太强了大佬
想请教老师,我运行项目的时候报IllegalStateException错误:java.lang.IllegalStateException: Execute getHelper failed : com.example.productdisplayapp.database.ProductInfoHelper。可能是什么引起的呢?照着您的代码写的:报错的完整信息:Device info:DBY-W09
Build info:DBY-W09 2.0.0.225(C00E210R1P13)
Module name:com.example.productdisplayapp
Version:1.0.0
Pid:19554
Uid:10231
Foreground:Yes
Reason:IllegalStateException
Selected stacktrace:
java.lang.IllegalStateException: Execute getHelper failed : com.example.productdisplayapp.database.ProductInfoHelper
at ohos.data.orm.impl.OrmStore.getHelper(OrmStore.java:304)
at ohos.data.orm.impl.OrmStore.createFromOrmPredicates(OrmStore.java:537)
at ohos.data.orm.impl.OrmStore.executeSharedFetchRequest(OrmStore.java:346)
at ohos.data.orm.impl.OrmContextImpl.query(OrmContextImpl.java:209)
at com.example.productdisplayapp.ProdInfoDataAbility.query(ProdInfoDataAbility.java:63)
at ohos.abilityshell.AbilityShellProviderDelegate.query(AbilityShellProviderDelegate.java:149)
at ohos.abilityshell.AbilityShellProvider.query(AbilityShellProvider.java:55)
at android.content.ContentProvider.query(ContentProvider.java:1218)
at android.content.ContentProvider.query(ContentProvider.java:1311)
at android.content.ContentProvider$Transport.query(ContentProvider.java:271)
at android.content.ContentProviderClient.query(ContentProviderClient.java:195)
at android.content.ContentProviderClient.query(ContentProviderClient.java:177)
at android.content.ContentProviderClient.query(ContentProviderClient.java:167)
at ohos.abilityshell.ApplicationDataAbility.query(ApplicationDataAbility.java:167)
at ohos.aafwk.ability.DataAbilityHelper.query(DataAbilityHelper.java:423)
at com.example.productdisplayapp.slice.MainAbilitySlice.initIndexImage(MainAbilitySlice.java:211)
at com.example.productdisplayapp.slice.MainAbilitySlice.initindex(MainAbilitySlice.java:140)
at com.example.productdisplayapp.slice.MainAbilitySlice.access$000(MainAbilitySlice.java:33)
at com.example.productdisplayapp.slice.MainAbilitySlice$1.onSelected(MainAbilitySlice.java:77)
at ohos.agp.components.TabList$TabListSelectionHandler.onTabSelectionChanged(TabList.java:294)
at ohos.agp.components.TabList.nativeTabLayoutTabSelect(Native Method)
at ohos.agp.components.TabList.access$100(TabList.java:38)
at ohos.agp.components.TabList$Tab.select(TabList.java:183)
at ohos.agp.components.TabList.selectTab(TabList.java:572)
at ohos.agp.components.TabList.selectTabAt(TabList.java:558)
at com.example.productdisplayapp.slice.MainAbilitySlice.onStart(MainAbilitySlice.java:108)
at ohos.aafwk.ability.AbilitySlice.start(AbilitySlice.java:3270)
at ohos.aafwk.ability.AbilitySliceScheduler.handleStartAbilitySlice(AbilitySliceScheduler.java:717)
at ohos.aafwk.ability.AbilitySliceManager.onAbilityStart(AbilitySliceManager.java:300)
at ohos.aafwk.ability.Ability.dispatchAbilityLifecycle(Ability.java:4579)
at ohos.aafwk.ability.Ability.start(Ability.java:3634)
at ohos.aafwk.ability.Ability.handleLifecycleTransaction(Ability.java:4751)
at ohos.aafwk.ability.Ability.scheduleAbilityLifecycle(Ability.java:1517)
at ohos.abilityshell.AbilityShellDelegate.scheduleAbilityLifecycle(AbilityShellDelegate.java:132)
at ohos.abilityshell.AbilityShellActivityDelegate.onStart(AbilityShellActivityDelegate.java:340)
at ohos.abilityshell.AbilityShellActivity.onStart(AbilityShellActivity.java:67)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1447)
at android.app.Activity.performStart(Activity.java:8237)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4084)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:235)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:215)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:187)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:105)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2613)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8668)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)