Java教程

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

本文主要是介绍【JAVA UI】HarmonyOS 关系型数据增删改查,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 参考资料

参考资料如下
  1. 对象关系映射数据库开发指导
  2. 相关demo

项目配置

项目配置

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

compileOptions {
        annotationEnabled true
    }

cke_1024.png

 

建立关系型数据对象

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

package com.harmony.alliance.myapplication.model;

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

@Entity(tableName = "user")//todo 表明为tableName
public class User   extends OrmObject {
    //todo 表的id为自增长,
    @PrimaryKey(autoGenerate = true)
    private Integer userId;
    //todo 表的用户名
    private  String name;
    //todo 用户年龄
    private  int age;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
实现数据库表对象建立

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

 

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

api讲解

数据库的创建

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

  helper = new DatabaseHelper(this);
  context = helper.getOrmContext("Test", "Test.db", TestDatabase.class);
1、数据库插入

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

        User user = new User();
        user.setAge(18);
        user.setName(QueryValue);
        System.err.println("###" + user.toString());
        boolean InsertFlag = context.insert(user);
        if (InsertFlag) {
            TextResult.setText("插入成功");
        } else {
            TextResult.setText("插入失败");
        }
        context.flush();//todo 刷新数据
2、数据库删除

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

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

  OrmPredicates DeleteData =
                context.where(User.class)//todo 哪一张表
                .equalTo("name", QueryValue);//todo 查询条件
        int deleteNum = context.delete(DeleteData);
        if (deleteNum > 0) {
            TextResult.setText("删除成功");
        } else {
            TextResult.setText("删除失败");
        }
        context.flush();
3、数据库修改

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

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

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

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

代码实现

xml代码

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

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="horizontal_center"
    ohos:orientation="vertical">

    <Text
        ohos:id="$+id:Text_Insert"
        ohos:height="80vp"
        ohos:width="match_parent"
        ohos:text_alignment="center"
        ohos:layout_alignment="horizontal_center"
        ohos:text="插入数据"
        ohos:text_size="20vp"
        />

    <Text
        ohos:id="$+id:Text_Update"
        ohos:height="80vp"
        ohos:width="match_parent"
        ohos:text_alignment="center"
        ohos:background_element="#Ed6262"
        ohos:layout_alignment="horizontal_center"
        ohos:text="修改数据"
        ohos:text_size="20vp"
        />

    <Text
        ohos:id="$+id:Text_delete"
        ohos:height="80vp"
        ohos:width="match_parent"
        ohos:text_alignment="center"
        ohos:layout_alignment="horizontal_center"
        ohos:text="删除数据"
        ohos:text_size="20vp"
        />
    <Text
        ohos:id="$+id:Text_query"
        ohos:height="80vp"
        ohos:width="match_parent"
        ohos:text_alignment="center"
        ohos:background_element="#Ed6262"
        ohos:layout_alignment="horizontal_center"
        ohos:text="查询数据"
        ohos:text_size="20vp"
        />
    <Text
        ohos:id="$+id:Text_result"
        ohos:height="match_parent"
        ohos:width="match_parent"
        ohos:text_alignment="horizontal_center"
        ohos:layout_alignment="horizontal_center"
        ohos:text="数据升级"
        ohos:multiple_lines="true"
        ohos:text_size="20vp"
        />
</DirectionalLayout>

cke_14305.png

java按钮

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

package com.harmony.alliance.myapplication.slice;

import com.harmony.alliance.myapplication.ResourceTable;
import com.harmony.alliance.myapplication.model.TestDatabase;
import com.harmony.alliance.myapplication.model.User;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
import ohos.data.DatabaseHelper;
import ohos.data.orm.OrmContext;
import ohos.data.orm.OrmPredicates;
import ohos.data.rdb.ValuesBucket;

import java.util.Date;
import java.util.List;

public class MainAbilitySlice extends AbilitySlice {
    private Text TextInsert, TextUpdate, TextDelete, TextQuery, TextResult;
    private DatabaseHelper helper;
    private OrmContext context;
    private String QueryValue = "luck";

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        TextInsert = (Text) findComponentById(ResourceTable.Id_Text_Insert);
        TextDelete = (Text) findComponentById(ResourceTable.Id_Text_delete);
        TextUpdate = (Text) findComponentById(ResourceTable.Id_Text_Update);
        TextQuery = (Text) findComponentById(ResourceTable.Id_Text_query);
        TextResult = (Text) findComponentById(ResourceTable.Id_Text_result);
        //todo OrmContext创建数据库
        helper = new DatabaseHelper(this);
        context = helper.getOrmContext("Test", "Test.db", TestDatabase.class);

        TextInsert.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                InsertData();
            }
        });

        TextQuery.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                QueryData();
            }
        });

        TextUpdate.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                updateData();
            }
        });
        TextDelete.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                DeleteData();
            }
        });


    }

    /**
     * 删除数据
     * 创建删除的条件对象OrmPredicates
     * 然后在调用OrmContext的delete的方法,
     * 如何判断是否删除成功
     *他返回的类型是int类型数据,代表删除了几条数据
     * 如果他删除的条数大于0代表删除成功
     * 如果小于等于0代表删除失败
     *   OrmContext的flush的方法,刷新表格数据
     */
    private void DeleteData() {
        OrmPredicates DeleteData =
                context.where(User.class)//todo 哪一张表
                .equalTo("name", QueryValue);//todo 查询条件
        int deleteNum = context.delete(DeleteData);
        if (deleteNum > 0) {
            TextResult.setText("删除成功");
        } else {
            TextResult.setText("删除失败");
        }
        context.flush();
    }

    /**
     * 修改姓名为luck为happy
     * 创建OrmPredicates的对象,
     * 调用OrmContext的update的方法,
     * 如何判断是否修改成功
     * update的方法返回一个int类型的数据
     * 如果返回的数据大于0的时候,代表他修改成功
     * 如果返回的数据小于等于0的时候,代表他修改失败
     *  OrmContext的flush的方法,刷新表格数据
     */
    private void updateData() {
        OrmPredicates update = context.where(User.class)//todo 查询表格
                .equalTo("name", QueryValue);//todo 查询条件
        ValuesBucket valuesBucket = new ValuesBucket();
        valuesBucket.putInteger("age", 31);
        if (QueryValue.equals("happy")) {
            valuesBucket.putString("name", "luck");
        } else {
            valuesBucket.putString("name", "happy");
        }
        int updateNum = context.update(update, valuesBucket);//todo 得到 修改结果
        if (updateNum > 0) {//todo 修改成功
            if (QueryValue.equals("happy")) {
                QueryValue = "luck";
            } else {
                QueryValue = "happy";
            }
            TextResult.setText("修改成功");
        } else {//todo 修改失败
            TextResult.setText("修改失败");
        }
        context.flush();// todo  刷新数据
    }

    /**
     * 查询数据
     *  创建OrmPredicates的对象
     *  调用OrmContext的query的方法,
     *  如何得到数据
     *  OrmContext的query的方法返回数据集合,根据集合长度得到具体数据
     */
    private void QueryData() {
        OrmPredicates predicates = context.where(User.class);//todo 查询表
        predicates.equalTo("name", QueryValue);//todo 查询条件
        List<User> list = context.query(predicates);// todo 查询结果
        StringBuilder stringBuilder = new StringBuilder();
        if (list.size() > 0) {
            for (int i = 0; i < list.size(); i++) {
                stringBuilder.append(list.get(i).toString()).append("\n");
            }
            TextResult.setText(stringBuilder.toString());
        } else {
            TextResult.setText("暂无数据");
        }
    }

    /**
     * 插入数据
     * 首先创建User的对象,设置姓名和年龄的属性
     * 调用OrmContext的insert的方法,
     * 如何判断是否插入成功,insert的方法返回一个boolean类型数据
     * 如果返回true就代表他插入成功
     * 如果返回false就代表插入失败
     * OrmContext的flush的数据,将数据刷新到数据库中
     */
    public void InsertData() {
        User user = new User();
        user.setAge(18);
        user.setName(QueryValue);
        boolean InsertFlag = context.insert(user);
        if (InsertFlag) {
            TextResult.setText("插入成功");
        } else {
            TextResult.setText("插入失败");
        }
        context.flush();//todo 刷新数据
    }

}

运行效果

1.gif

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

这篇关于【JAVA UI】HarmonyOS 关系型数据增删改查的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!