鴻蒙開發(fā)實戰(zhàn)系列之一:鴻蒙開發(fā)實戰(zhàn)系列之一:圓角
鴻蒙開發(fā)實戰(zhàn)系列之二:鴻蒙開發(fā)實戰(zhàn)系列之二:事件總線EventBus/RxBus
鴻蒙開發(fā)實戰(zhàn)系列之三:鴻蒙開發(fā)實戰(zhàn)系列之三:網(wǎng)絡請求(原生+ Retrofit)
鴻蒙開發(fā)實戰(zhàn)系列之四:鴻蒙開發(fā)實戰(zhàn)系列之四:數(shù)據(jù)庫NoSQL-ObjectBox的使用
前言
上文介紹了ObjectBox垄潮,屬于神器,但是作為一個合格的碼農(nóng)胡桃,上的了廳堂鹉勒,下得了豬圈脯倚,神器好用锹淌,菜刀也是要會使的嘛辞色,這篇我們就來介紹下鴻蒙系統(tǒng)的數(shù)據(jù)庫如何使用
鴻蒙的關系型數(shù)據(jù)庫是基于SQLite的實現(xiàn)鸽嫂,官方提供了關系型數(shù)據(jù)庫實現(xiàn)和基于對象的關系型數(shù)據(jù)庫兩種數(shù)據(jù)庫操作泥从,本文會指導大家如何分別使用這兩種數(shù)據(jù)庫操作句占,來對數(shù)據(jù)庫進行簡單的CRUD操作。
關系型數(shù)據(jù)庫
關系型數(shù)據(jù)庫(Relational Database躯嫉,RDB)是一種基于關系模型來管理數(shù)據(jù)的數(shù)據(jù)庫纱烘。HarmonyOS關系型數(shù)據(jù)庫基于SQLite組件提供了一套完整的對本地數(shù)據(jù)庫進行管理的機制,對外提供了一系列的增祈餐、刪擂啥、改、查接口帆阳,也可以直接運行用戶輸入的SQL語句來滿足復雜的場景需要哺壶。運作機制如圖:
1、創(chuàng)建數(shù)據(jù)庫
//設置數(shù)據(jù)庫為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)");
//更多建表語句可以在這里寫
}
@Override
public void onUpgrade(RdbStore rdbStore, int i, int i1) {
//升級數(shù)據(jù)庫操作
}
});
2蜒谤、插入數(shù)據(jù)
//使用鍵值對方式插入數(shù)據(jù)庫rdbCreateDb()獲取的就是創(chuàng)建的時候生成的rdbStore
ValuesBucket values = new ValuesBucket();
values.putInteger("userId",1);
values.putString("userName","name1");
long id = rdbCreateDb().insert("User",values);
//使用最原始的sql語句插入數(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");//構建查詢謂詞
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);
增刪改查操作都可以通過rdbStore的executeSql方法资锰,直接執(zhí)行sql語句執(zhí)行。語句語法采用SQLite的語法阶祭。
對象關系型數(shù)據(jù)庫
HarmonyOS對象關系映射(Object Relational Mapping绷杜,ORM)數(shù)據(jù)庫是一款基于SQLite的數(shù)據(jù)庫框架直秆,屏蔽了底層SQLite數(shù)據(jù)庫的SQL操作,針對實體和關系提供了增刪改查等一系列的面向?qū)ο蠼涌诒廾恕瞄_發(fā)者不必再去編寫復雜的SQL語句圾结, 以操作對象的形式來操作數(shù)據(jù)庫,提升效率的同時也能聚焦于業(yè)務開發(fā)齿诉。運作機制如圖:
1筝野、環(huán)境配置
1、添加相應的jar包到模塊libs里面粤剧,相關文件可以在demo中找到遗座。
2、在模塊的build.gradle中的對應添加注解引用
//開啟注解
ohos {
compileOptions {
annotationEnabled true
}
}
//添加注解處理引用
dependencies {
annotationProcessor files("./libs/orm_annotations_java.jar", "./libs/orm_annotations_processor_java.jar")
}
2俊扳、初始化數(shù)據(jù)庫配置
1、新建數(shù)據(jù)庫實現(xiàn)類
//entities里放置的是表對應的javabean猛遍,version對應數(shù)據(jù)庫版本
@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ù)庫升級需要執(zhí)行的操作
}
};
}
}
2馋记、新建表對應的JavaBean
//對應的數(shù)據(jù)庫表名寫在注解里,另外記得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;
}
}
3懊烤、ORM對數(shù)據(jù)庫的基本操作
1梯醒、創(chuàng)建數(shù)據(jù)庫上下文操作對象
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茸习、改
//將查詢出來的數(shù)據(jù)值修改后更新到數(shù)據(jù)庫
OrmUser ormUser = ormQuery();
if (ormUser == null){
return;
}
ormUser.setUserName("name2");
ormCreateDb().update(ormUser);
ormCreateDb().flush();
5、刪
//將查詢出來的數(shù)據(jù)值從數(shù)據(jù)庫中刪除
OrmUser ormUser = ormQuery();
if (ormUser == null){
return;
}
ormCreateDb().delete(ormUser);
ormCreateDb().flush();
總結(jié)
數(shù)據(jù)庫中連接池的最大數(shù)量是4個壁肋,同一時間只能支持一個寫操作号胚!對象關系型數(shù)據(jù)的數(shù)據(jù)庫類型只支持基礎數(shù)據(jù)類型及Date、Time浸遗、Timestamp猫胁、Calendar、Blob(二進制大對象)跛锌、Clob(字符大對象)
文中相關的代碼在git:https://github.com/maolinnan/HarmonyosClass
這是本系列的第五篇弃秆,后面還會為大家?guī)砀嗟镍櫭筛韶洠凑埰诖?.....髓帽。
如果文章對您有一點啟發(fā)的話菠赚,希望您能點個贊,來一波關注郑藏。