• 【JAVA UI】HarmonyOS关系型数据增删改查


     参考资料

    参考资料如下

    1. 对象关系映射数据库开发指导
    2. 相关demo

    项目配置

    项目配置

    在应用级(entry)的bulid.gradle的ohos添加如下代码,如图所示

    1. compileOptions {
    2. annotationEnabled true
    3. }

    cke_1024.png

    建立关系型数据对象

    新建一个User对象包含姓名(name),年龄(age),和表索引(UserId),并且表索引为自增长格式,User需要继承OrmObject的对象,并且在User添加Entity注解,标明标明,实现get,set和tostring的方法,代码如下

    1. package com.harmony.alliance.myapplication.model;
    2. import ohos.data.orm.OrmObject;
    3. import ohos.data.orm.annotation.Entity;
    4. import ohos.data.orm.annotation.PrimaryKey;
    5. @Entity(tableName = "user")//todo 表明为tableName
    6. public class User extends OrmObject {
    7. //todo 表的id为自增长,
    8. @PrimaryKey(autoGenerate = true)
    9. private Integer userId;
    10. //todo 表的用户名
    11. private String name;
    12. //todo 用户年龄
    13. private int age;
    14. public Integer getUserId() {
    15. return userId;
    16. }
    17. public void setUserId(Integer userId) {
    18. this.userId = userId;
    19. }
    20. public String getName() {
    21. return name;
    22. }
    23. public void setName(String name) {
    24. this.name = name;
    25. }
    26. public int getAge() {
    27. return age;
    28. }
    29. public void setAge(int age) {
    30. this.age = age;
    31. }
    32. @Override
    33. public String toString() {
    34. return "User{" +
    35. "userId=" + userId +
    36. ", name='" + name + '\'' +
    37. ", age=" + age +
    38. '}';
    39. }
    40. }

    实现数据库表对象建立

    新建抽象数据的对象(TestDatabase)继承OrmDatabase,在该对象添加Database的注解,实现entities和version两个参数,代码如下

    1. package com.harmony.alliance.myapplication.model;
    2. import ohos.data.orm.OrmDatabase;
    3. import ohos.data.orm.annotation.Database;
    4. /**
    5. * entities 关系型数据的对象
    6. * version 数据的版本
    7. */
    8. @Database(entities = {User.class}, version = 1)
    9. public abstract class TestDatabase extends OrmDatabase {
    10. }

    api讲解

    数据库的创建

    创建DatabaseHelper,然后获取到OrmContext,代码如下

    1. helper = new DatabaseHelper(this);
    2. context = helper.getOrmContext("Test", "Test.db", TestDatabase.class);

    1、数据库插入

    ​ 首先创建User的对象,设置姓名和年龄的属性
    ​ 调用OrmContext的insert的方法,
    ​ 如何判断是否插入成功,insert的方法返回一个boolean类型数据
    ​ 如果返回true就代表他插入成功
    ​ 如果返回false就代表插入失败
    ​ OrmContext的flush的方法,将数据刷新到数据库中,代码如下

    1. User user = new User();
    2. user.setAge(18);
    3. user.setName(QueryValue);
    4. System.err.println("###" + user.toString());
    5. boolean InsertFlag = context.insert(user);
    6. if (InsertFlag) {
    7. TextResult.setText("插入成功");
    8. } else {
    9. TextResult.setText("插入失败");
    10. }
    11. context.flush();//todo 刷新数据

    2、数据库删除

    创建删除的条件对象OrmPredicates
    然后在调用OrmContext的delete的方法,
    如何判断是否删除成功
    他返回的类型是int类型数据,代表删除了几条数据
    如果他删除的条数大于0代表删除成功
    如果小于等于0代表删除失败

    OrmContext的flush的方法,刷新表格数据,代码如下

    1. OrmPredicates DeleteData =
    2. context.where(User.class)//todo 哪一张表
    3. .equalTo("name", QueryValue);//todo 查询条件
    4. int deleteNum = context.delete(DeleteData);
    5. if (deleteNum > 0) {
    6. TextResult.setText("删除成功");
    7. } else {
    8. TextResult.setText("删除失败");
    9. }
    10. context.flush();

    3、数据库修改

    修改姓名为luck为happy
    创建OrmPredicates的对象,
    调用OrmContext的update的方法,
    如何判断是否修改成功
    update的方法返回一个int类型的数据
    如果返回的数据大于0的时候,代表修改成功
    如果返回的数据小于等于0的时候,代表修改失败
    OrmContext的flush的方法,刷新表格数据,代码如下

    1. OrmPredicates update = context.where(User.class)//todo 查询表格
    2. .equalTo("name", QueryValue);//todo 查询条件
    3. ValuesBucket valuesBucket = new ValuesBucket();
    4. valuesBucket.putInteger("age", 31);
    5. valuesBucket.putString("name", "luck");
    6. int updateNum = context.update(update, valuesBucket);//todo 得到 修改结果
    7. if (updateNum > 0) {//todo 修改成功
    8. TextResult.setText("修改成功");
    9. } else {//todo 修改失败
    10. TextResult.setText("修改失败");
    11. }
    12. context.flush();// todo 刷新数据

    4、数据库查询

    查询数据
    创建OrmPredicates的对象
    调用OrmContext的query的方法,
    如何得到数据?
    OrmContext的query的方法返回数据集合,根据集合长度得到具体数据。代码如下

    1. OrmPredicates predicates = context.where(User.class);//todo 查询表
    2. predicates.equalTo("name", QueryValue);//todo 查询条件
    3. List list = context.query(predicates);// todo 查询结果
    4. StringBuilder stringBuilder = new StringBuilder();
    5. if (list.size() > 0) {
    6. for (int i = 0; i < list.size(); i++) {
    7. stringBuilder.append(list.get(i).toString()).append("\n");
    8. }
    9. TextResult.setText(stringBuilder.toString());
    10. } else {
    11. TextResult.setText("暂无数据");
    12. }

    代码实现

    xml代码

    在xml布局绘画“插入数据”,“修改数据”,“删除数据”,“查询数据”,“显示数据结果”的五个按钮,代码和效果图如下

    1. <DirectionalLayout
    2. xmlns:ohos="http://schemas.huawei.com/res/ohos"
    3. ohos:height="match_parent"
    4. ohos:width="match_parent"
    5. ohos:alignment="horizontal_center"
    6. ohos:orientation="vertical">
    7. <Text
    8. ohos:id="$+id:Text_Insert"
    9. ohos:height="80vp"
    10. ohos:width="match_parent"
    11. ohos:text_alignment="center"
    12. ohos:layout_alignment="horizontal_center"
    13. ohos:text="插入数据"
    14. ohos:text_size="20vp"
    15. />
    16. <Text
    17. ohos:id="$+id:Text_Update"
    18. ohos:height="80vp"
    19. ohos:width="match_parent"
    20. ohos:text_alignment="center"
    21. ohos:background_element="#Ed6262"
    22. ohos:layout_alignment="horizontal_center"
    23. ohos:text="修改数据"
    24. ohos:text_size="20vp"
    25. />
    26. <Text
    27. ohos:id="$+id:Text_delete"
    28. ohos:height="80vp"
    29. ohos:width="match_parent"
    30. ohos:text_alignment="center"
    31. ohos:layout_alignment="horizontal_center"
    32. ohos:text="删除数据"
    33. ohos:text_size="20vp"
    34. />
    35. <Text
    36. ohos:id="$+id:Text_query"
    37. ohos:height="80vp"
    38. ohos:width="match_parent"
    39. ohos:text_alignment="center"
    40. ohos:background_element="#Ed6262"
    41. ohos:layout_alignment="horizontal_center"
    42. ohos:text="查询数据"
    43. ohos:text_size="20vp"
    44. />
    45. <Text
    46. ohos:id="$+id:Text_result"
    47. ohos:height="match_parent"
    48. ohos:width="match_parent"
    49. ohos:text_alignment="horizontal_center"
    50. ohos:layout_alignment="horizontal_center"
    51. ohos:text="数据升级"
    52. ohos:multiple_lines="true"
    53. ohos:text_size="20vp"
    54. />
    55. DirectionalLayout>

    cke_14305.png

    java按钮

    在代码分别实现增删改查的逻辑实现,代码如下

    1. package com.harmony.alliance.myapplication.slice;
    2. import com.harmony.alliance.myapplication.ResourceTable;
    3. import com.harmony.alliance.myapplication.model.TestDatabase;
    4. import com.harmony.alliance.myapplication.model.User;
    5. import ohos.aafwk.ability.AbilitySlice;
    6. import ohos.aafwk.content.Intent;
    7. import ohos.agp.components.Component;
    8. import ohos.agp.components.Text;
    9. import ohos.data.DatabaseHelper;
    10. import ohos.data.orm.OrmContext;
    11. import ohos.data.orm.OrmPredicates;
    12. import ohos.data.rdb.ValuesBucket;
    13. import java.util.Date;
    14. import java.util.List;
    15. public class MainAbilitySlice extends AbilitySlice {
    16. private Text TextInsert, TextUpdate, TextDelete, TextQuery, TextResult;
    17. private DatabaseHelper helper;
    18. private OrmContext context;
    19. private String QueryValue = "luck";
    20. @Override
    21. public void onStart(Intent intent) {
    22. super.onStart(intent);
    23. super.setUIContent(ResourceTable.Layout_ability_main);
    24. TextInsert = (Text) findComponentById(ResourceTable.Id_Text_Insert);
    25. TextDelete = (Text) findComponentById(ResourceTable.Id_Text_delete);
    26. TextUpdate = (Text) findComponentById(ResourceTable.Id_Text_Update);
    27. TextQuery = (Text) findComponentById(ResourceTable.Id_Text_query);
    28. TextResult = (Text) findComponentById(ResourceTable.Id_Text_result);
    29. //todo OrmContext创建数据库
    30. helper = new DatabaseHelper(this);
    31. context = helper.getOrmContext("Test", "Test.db", TestDatabase.class);
    32. TextInsert.setClickedListener(new Component.ClickedListener() {
    33. @Override
    34. public void onClick(Component component) {
    35. InsertData();
    36. }
    37. });
    38. TextQuery.setClickedListener(new Component.ClickedListener() {
    39. @Override
    40. public void onClick(Component component) {
    41. QueryData();
    42. }
    43. });
    44. TextUpdate.setClickedListener(new Component.ClickedListener() {
    45. @Override
    46. public void onClick(Component component) {
    47. updateData();
    48. }
    49. });
    50. TextDelete.setClickedListener(new Component.ClickedListener() {
    51. @Override
    52. public void onClick(Component component) {
    53. DeleteData();
    54. }
    55. });
    56. }
    57. /**
    58. * 删除数据
    59. * 创建删除的条件对象OrmPredicates
    60. * 然后在调用OrmContext的delete的方法,
    61. * 如何判断是否删除成功
    62. *他返回的类型是int类型数据,代表删除了几条数据
    63. * 如果他删除的条数大于0代表删除成功
    64. * 如果小于等于0代表删除失败
    65. * OrmContext的flush的方法,刷新表格数据
    66. */
    67. private void DeleteData() {
    68. OrmPredicates DeleteData =
    69. context.where(User.class)//todo 哪一张表
    70. .equalTo("name", QueryValue);//todo 查询条件
    71. int deleteNum = context.delete(DeleteData);
    72. if (deleteNum > 0) {
    73. TextResult.setText("删除成功");
    74. } else {
    75. TextResult.setText("删除失败");
    76. }
    77. context.flush();
    78. }
    79. /**
    80. * 修改姓名为luck为happy
    81. * 创建OrmPredicates的对象,
    82. * 调用OrmContext的update的方法,
    83. * 如何判断是否修改成功
    84. * update的方法返回一个int类型的数据
    85. * 如果返回的数据大于0的时候,代表他修改成功
    86. * 如果返回的数据小于等于0的时候,代表他修改失败
    87. * OrmContext的flush的方法,刷新表格数据
    88. */
    89. private void updateData() {
    90. OrmPredicates update = context.where(User.class)//todo 查询表格
    91. .equalTo("name", QueryValue);//todo 查询条件
    92. ValuesBucket valuesBucket = new ValuesBucket();
    93. valuesBucket.putInteger("age", 31);
    94. if (QueryValue.equals("happy")) {
    95. valuesBucket.putString("name", "luck");
    96. } else {
    97. valuesBucket.putString("name", "happy");
    98. }
    99. int updateNum = context.update(update, valuesBucket);//todo 得到 修改结果
    100. if (updateNum > 0) {//todo 修改成功
    101. if (QueryValue.equals("happy")) {
    102. QueryValue = "luck";
    103. } else {
    104. QueryValue = "happy";
    105. }
    106. TextResult.setText("修改成功");
    107. } else {//todo 修改失败
    108. TextResult.setText("修改失败");
    109. }
    110. context.flush();// todo 刷新数据
    111. }
    112. /**
    113. * 查询数据
    114. * 创建OrmPredicates的对象
    115. * 调用OrmContext的query的方法,
    116. * 如何得到数据
    117. * OrmContext的query的方法返回数据集合,根据集合长度得到具体数据
    118. */
    119. private void QueryData() {
    120. OrmPredicates predicates = context.where(User.class);//todo 查询表
    121. predicates.equalTo("name", QueryValue);//todo 查询条件
    122. List list = context.query(predicates);// todo 查询结果
    123. StringBuilder stringBuilder = new StringBuilder();
    124. if (list.size() > 0) {
    125. for (int i = 0; i < list.size(); i++) {
    126. stringBuilder.append(list.get(i).toString()).append("\n");
    127. }
    128. TextResult.setText(stringBuilder.toString());
    129. } else {
    130. TextResult.setText("暂无数据");
    131. }
    132. }
    133. /**
    134. * 插入数据
    135. * 首先创建User的对象,设置姓名和年龄的属性
    136. * 调用OrmContext的insert的方法,
    137. * 如何判断是否插入成功,insert的方法返回一个boolean类型数据
    138. * 如果返回true就代表他插入成功
    139. * 如果返回false就代表插入失败
    140. * OrmContext的flush的数据,将数据刷新到数据库中
    141. */
    142. public void InsertData() {
    143. User user = new User();
    144. user.setAge(18);
    145. user.setName(QueryValue);
    146. boolean InsertFlag = context.insert(user);
    147. if (InsertFlag) {
    148. TextResult.setText("插入成功");
    149. } else {
    150. TextResult.setText("插入失败");
    151. }
    152. context.flush();//todo 刷新数据
    153. }
    154. }

    运行效果

    1.gif

     

     欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

  • 相关阅读:
    DO LARGE LANGUAGE MODELS KNOW ABOUT FACTS?
    N皇后问题详解
    快速幂 c++
    Java函数式接口
    图像的频域--学习笔记
    加载员工数据至员工维度表
    selenium
    php 获取每月开始结束时间,指定月份的开始结束时间戳
    yamot:一款功能强大的基于Web的服务器安全监控工具
    STM32CubeIDE+STLINK调试和下载代码
  • 原文地址:https://blog.csdn.net/weixin_44708240/article/details/126067135