鴻蒙開發實戰系列之五:鴻蒙系統原生數據庫

鴻蒙開發實戰系列之一:鴻蒙開發實戰系列之一:圓角java

鴻蒙開發實戰系列之二:鴻蒙開發實戰系列之二:事件總線EventBus/RxBusgit

鴻蒙開發實戰系列之三:鴻蒙開發實戰系列之三:網絡請求(原生+ Retrofit)github

鴻蒙開發實戰系列之四:鴻蒙開發實戰系列之四:數據庫NoSQL-ObjectBox的使用sql

前言

上文介紹了ObjectBox,屬於神器,可是做爲一個合格的碼農,上的了廳堂,下得了豬圈,神器好用,菜刀也是要會使的嘛,這篇咱們就來介紹下鴻蒙系統的數據庫如何使用 鴻蒙的關係型數據庫是基於SQLite的實現,官方提供了關係型數據庫實現和基於對象的關係型數據庫兩種數據庫操做,本文會指導你們如何分別使用這兩種數據庫操做,來對數據庫進行簡單的CRUD操做。數據庫

關係型數據庫

關係型數據庫(Relational Database,RDB)是一種基於關係模型來管理數據的數據庫。HarmonyOS關係型數據庫基於SQLite組件提供了一套完整的對本地數據庫進行管理的機制,對外提供了一系列的增、刪、改、查接口,也能夠直接運行用戶輸入的SQL語句來知足複雜的場景須要。運做機制如圖:網絡

一、建立數據庫

//設置數據庫爲RdbStore.db
StoreConfig config = StoreConfig.newDefaultConfig("RdbStore.db");    
DatabaseHelper helper = new DatabaseHelper(getContext());
RdbStore rdbStore = helper.getRdbStore(config, 1, new RdbOpenCallback() {
    @Override
    public void onCreate(RdbStore rdbStore) {
        //建立表
        rdbStore.executeSql("create table if not exists User(userId integer primary key autoincrement,userName text)");
        //更多建表語句能夠在這裏寫
    }

    @Override
    public void onUpgrade(RdbStore rdbStore, int i, int i1) {
        //升級數據庫操做
    }
});

二、插入數據

//使用鍵值對方式插入數據庫rdbCreateDb()獲取的就是建立的時候生成的rdbStore
ValuesBucket values = new ValuesBucket();
values.putInteger("userId",1);
values.putString("userName","name1");
long id = rdbCreateDb().insert("User",values);

//使用最原始的sql語句插入數據
rdbCreateDb().executeSql("insert into User (userId,userName) values (2,'name2')");

三、刪除數據

RdbPredicates rdbPredicates = new RdbPredicates("User").equalTo("userName","name1");
int i = rdbCreateDb().delete(rdbPredicates);

四、查詢數據

String[] columns = new String[]{"userId","userName"};
RdbPredicates rdbPredicates = new RdbPredicates("User");//構建查詢謂詞
ResultSet resultSet = rdbCreateDb().query(rdbPredicates,columns);
while (resultSet.goToNextRow()){
    int userId = resultSet.getInt(resultSet.getColumnIndexForName("userId"));
    String userName = resultSet.getString(resultSet.getColumnIndexForName("userName"));
    HiLog.warn(new HiLogLabel(HiLog.LOG_APP, 0, "===demo==="), "查詢到userId=" + userId + "  userName=" +userName);
}

五、修改數據

RdbPredicates rdbPredicates = new RdbPredicates("User").equalTo("userName","name2");
ValuesBucket values = new ValuesBucket();
values.putString("userName","name3");
//更新數據
rdbCreateDb().update(values,rdbPredicates);

增刪改查操做均可以經過rdbStore的executeSql方法,直接執行sql語句執行。語句語法採用SQLite的語法。app

對象關係型數據庫

HarmonyOS對象關係映射(Object Relational Mapping,ORM)數據庫是一款基於SQLite的數據庫框架,屏蔽了底層SQLite數據庫的SQL操做,針對實體和關係提供了增刪改查等一系列的面向對象接口。應用開發者沒必要再去編寫複雜的SQL語句, 以操做對象的形式來操做數據庫,提高效率的同時也能聚焦於業務開發。運做機制如圖:框架

一、環境配置

一、添加相應的jar包到模塊libs裏面,相關文件能夠在demo中找到。ide

二、在模塊的build.gradle中的對應添加註解引用gradle

//開啓註解
ohos {
    compileOptions {
        annotationEnabled true
    }
}

//添加註解處理引用
dependencies {
    annotationProcessor files("./libs/orm_annotations_java.jar", "./libs/orm_annotations_processor_java.jar")
}

二、初始化數據庫配置

一、新建數據庫實現類

//entities裏放置的是表對應的javabean,version對應數據庫版本
@Database(entities = {OrmUser.class}, version = 1)
public abstract class OrmDBTest extends OrmDatabase {
    @Override
    public RdbOpenCallback getHelper() {
        return new RdbOpenCallback() {
            @Override

            public void onCreate(RdbStore rdbStore) {
                //建立成功後執行操做
            }

            @Override
            public void onUpgrade(RdbStore rdbStore, int oldVersion, int newVersion) {
               //數據庫升級須要執行的操做
            }
        };
    }
}

二、新建表對應的JavaBean

//對應的數據庫表名寫在註解裏,另外記得get/set要寫齊全
@Entity(tableName = "OrmUser")
public class OrmUser extends OrmObject {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private int userId;
    private String userName;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
}

三、ORM對數據庫的基本操做

一、建立數據庫上下文操做對象

private OrmContext ormCreateDb() {
    DatabaseHelper databaseHelper = new DatabaseHelper(getContext());
    OrmContext ormContext = databaseHelper.getOrmContext("OrmDBTest", "OrmDBTest.db", OrmDBTest.class);
    return ormContext;
}

二、增

OrmUser ormUser = new OrmUser();
ormUser.setUserId(1);
ormUser.setUserName("name1");
boolean isSuccess = ormCreateDb().insert(ormUser);
ormCreateDb().flush();

三、查

//查詢userId = 1的數據
OrmPredicates ormPredicates = ormCreateDb().where(OrmUser.class).equalTo("userId","1");
List<OrmUser> ormUsers =  ormCreateDb().query(ormPredicates);

四、改

//將查詢出來的數據值修改後更新到數據庫
OrmUser ormUser = ormQuery();
if (ormUser == null){
    return;
}
ormUser.setUserName("name2");
ormCreateDb().update(ormUser);
ormCreateDb().flush();

五、刪

//將查詢出來的數據值從數據庫中刪除
OrmUser ormUser = ormQuery();
if (ormUser == null){
    return;
}
ormCreateDb().delete(ormUser);
ormCreateDb().flush();

總結

數據庫中鏈接池的最大數量是4個,同一時間只能支持一個寫操做!對象關係型數據的數據庫類型只支持基礎數據類型及Date、Time、Timestamp、Calendar、Blob(二進制大對象)、Clob(字符大對象) 文中相關的代碼在git:https://github.com/maolinnan/HarmonyosClass

這是本系列的第五篇,後面還會爲你們帶來更多的鴻蒙乾貨,敬請期待......。

若是文章對您有一點啓發的話,但願您能點個贊,來一波關注。

相關文章
相關標籤/搜索