這篇我們就來(lái)介紹下鴻蒙系統(tǒng)的數(shù)據(jù)庫(kù)如何使用 鴻蒙的關(guān)系型數(shù)據(jù)庫(kù)是基于SQLite的實(shí)現(xiàn),官方提供了關(guān)系型數(shù)據(jù)庫(kù)實(shí)現(xiàn)和基于對(duì)象的關(guān)系型數(shù)據(jù)庫(kù)兩種數(shù)據(jù)庫(kù)操作,本文會(huì)指導(dǎo)大家如何分別使用這兩種數(shù)據(jù)庫(kù)操作,來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單的CRUD操作。
關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù)(Relational Database,RDB)是一種基于關(guān)系模型來(lái)管理數(shù)據(jù)的數(shù)據(jù)庫(kù)。HarmonyOS關(guān)系型數(shù)據(jù)庫(kù)基于SQLite組件提供了一套完整的對(duì)本地?cái)?shù)據(jù)庫(kù)進(jìn)行管理的機(jī)制,對(duì)外提供了一系列的增、刪、改、查接口,也可以直接運(yùn)行用戶輸入的SQL語(yǔ)句來(lái)滿足復(fù)雜的場(chǎng)景需要。運(yùn)作機(jī)制如圖:
1、創(chuàng)建數(shù)據(jù)庫(kù)
//設(shè)置數(shù)據(jù)庫(kù)為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) {
//創(chuàng)建表
rdbStore.executeSql(“create table if not exists User(userId integer primary key autoincrement,userName text)”);
//更多建表語(yǔ)句可以在這里寫(xiě)
}
@Override
public void onUpgrade(RdbStore rdbStore, int i, int i1) {
//升級(jí)數(shù)據(jù)庫(kù)操作
}
});
2、插入數(shù)據(jù)
//使用鍵值對(duì)方式插入數(shù)據(jù)庫(kù)rdbCreateDb()獲取的就是創(chuàng)建的時(shí)候生成的rdbStore
ValuesBucket values = new ValuesBucket();
values.putInteger(“userId”,1);
values.putString(“userName”,“name1”);
long id = rdbCreateDb().insert(“User”,values);
//使用最原始的sql語(yǔ)句插入數(shù)據(jù)
rdbCreateDb().executeSql(“insert into User (userId,userName) values (2,‘name2’)”);
3、刪除數(shù)據(jù)
RdbPredicates rdbPredicates = new RdbPredicates(“User”).equalTo(“userName”,“name1”);
int i = rdbCreateDb().delete(rdbPredicates);
4、查詢數(shù)據(jù)
String[] columns = new String[]{“userId”,“userName”};
RdbPredicates rdbPredicates = new RdbPredicates(“User”);//構(gòu)建查詢謂詞
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);
}
5、修改數(shù)據(jù)
RdbPredicates rdbPredicates = new RdbPredicates(“User”).equalTo(“userName”,“name2”);
ValuesBucket values = new ValuesBucket();
values.putString(“userName”,“name3”);
//更新數(shù)據(jù)
rdbCreateDb().update(values,rdbPredicates);
增刪改查操作都可以通過(guò)rdbStore的executeSql方法,直接執(zhí)行sql語(yǔ)句執(zhí)行。語(yǔ)句語(yǔ)法采用SQLite的語(yǔ)法。
對(duì)象關(guān)系型數(shù)據(jù)庫(kù)
HarmonyOS對(duì)象關(guān)系映射(Object Relational Mapping,ORM)數(shù)據(jù)庫(kù)是一款基于SQLite的數(shù)據(jù)庫(kù)框架,屏蔽了底層SQLite數(shù)據(jù)庫(kù)的SQL操作,針對(duì)實(shí)體和關(guān)系提供了增刪改查等一系列的面向?qū)ο蠼涌凇?yīng)用開(kāi)發(fā)者不必再去編寫(xiě)復(fù)雜的SQL語(yǔ)句, 以操作對(duì)象的形式來(lái)操作數(shù)據(jù)庫(kù),提升效率的同時(shí)也能聚焦于業(yè)務(wù)開(kāi)發(fā)。運(yùn)作機(jī)制如圖:
1、環(huán)境配置
1、添加相應(yīng)的jar包到模塊libs里面,相關(guān)文件可以在demo中找到。
2、在模塊的build.gradle中的對(duì)應(yīng)添加注解引用
//開(kāi)啟注解
ohos {
compileOptions {
annotationEnabled true
}
}
//添加注解處理引用
dependencies {
annotationProcessor files(“。/libs/orm_annotations_java.jar”, “。/libs/orm_annotations_processor_java.jar”)
}
2、初始化數(shù)據(jù)庫(kù)配置
1、新建數(shù)據(jù)庫(kù)實(shí)現(xiàn)類
//entities里放置的是表對(duì)應(yīng)的javabean,version對(duì)應(yīng)數(shù)據(jù)庫(kù)版本
@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) {
//創(chuàng)建成功后執(zhí)行操作
}
@Override
public void onUpgrade(RdbStore rdbStore, int oldVersion, int newVersion) {
//數(shù)據(jù)庫(kù)升級(jí)需要執(zhí)行的操作
}
};
}
}
2、新建表對(duì)應(yīng)的JavaBean
//對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名寫(xiě)在注解里,另外記得get/set要寫(xiě)齊全
@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;
}
}
3、ORM對(duì)數(shù)據(jù)庫(kù)的基本操作
1、創(chuàng)建數(shù)據(jù)庫(kù)上下文操作對(duì)象
private OrmContext ormCreateDb() {
DatabaseHelper databaseHelper = new DatabaseHelper(getContext());
OrmContext ormContext = databaseHelper.getOrmContext(“OrmDBTest”, “OrmDBTest.db”, OrmDBTest.class);
return ormContext;
}
2、增
OrmUser ormUser = new OrmUser();
ormUser.setUserId(1);
ormUser.setUserName(“name1”);
boolean isSuccess = ormCreateDb().insert(ormUser);
ormCreateDb().flush();
3、查
//查詢userId = 1的數(shù)據(jù)
OrmPredicates ormPredicates = ormCreateDb().where(OrmUser.class).equalTo(“userId”,“1”);
List《OrmUser》 ormUsers = ormCreateDb().query(ormPredicates);
4、改
//將查詢出來(lái)的數(shù)據(jù)值修改后更新到數(shù)據(jù)庫(kù)
OrmUser ormUser = ormQuery();
if (ormUser == null){
return;
}
ormUser.setUserName(“name2”);
ormCreateDb().update(ormUser);
ormCreateDb().flush();
5、刪
//將查詢出來(lái)的數(shù)據(jù)值從數(shù)據(jù)庫(kù)中刪除
OrmUser ormUser = ormQuery();
if (ormUser == null){
return;
}
ormCreateDb().delete(ormUser);
ormCreateDb().flush();
總結(jié)
數(shù)據(jù)庫(kù)中連接池的最大數(shù)量是4個(gè),同一時(shí)間只能支持一個(gè)寫(xiě)操作!對(duì)象關(guān)系型數(shù)據(jù)的數(shù)據(jù)庫(kù)類型只支持基礎(chǔ)數(shù)據(jù)類型及Date、Time、Timestamp、Calendar、Blob(二進(jìn)制大對(duì)象)、Clob(字符大對(duì)象) 文中相關(guān)的代碼在git:https://github.com/maolinnan/HarmonyosClass
-
SQL
+關(guān)注
關(guān)注
1文章
783瀏覽量
45185 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3929瀏覽量
66304 -
關(guān)系型數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
0文章
8瀏覽量
2406 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2126瀏覽量
33160
發(fā)布評(píng)論請(qǐng)先 登錄
有個(gè)excel數(shù)據(jù)表 想導(dǎo)入鴻蒙數(shù)據(jù)庫(kù),求sqlite數(shù)據(jù)使用文檔?
什么是關(guān)系型數(shù)據(jù)庫(kù)
什么是非關(guān)系型數(shù)據(jù)庫(kù)
鴻蒙的數(shù)據(jù)庫(kù)知識(shí)點(diǎn)學(xué)習(xí)
OpenHarmony關(guān)系型數(shù)據(jù)庫(kù)概述

評(píng)論