這篇我們就來介紹下鴻蒙系統(tǒng)的數(shù)據(jù)庫如何使用 鴻蒙的關(guān)系型數(shù)據(jù)庫是基于SQLite的實(shí)現(xiàn),官方提供了關(guān)系型數(shù)據(jù)庫實(shí)現(xiàn)和基于對象的關(guān)系型數(shù)據(jù)庫兩種數(shù)據(jù)庫操作,本文會指導(dǎo)大家如何分別使用這兩種數(shù)據(jù)庫操作,來對數(shù)據(jù)庫進(jìn)行簡單的CRUD操作。
關(guān)系型數(shù)據(jù)庫
關(guān)系型數(shù)據(jù)庫(Relational Database,RDB)是一種基于關(guān)系模型來管理數(shù)據(jù)的數(shù)據(jù)庫。HarmonyOS關(guān)系型數(shù)據(jù)庫基于SQLite組件提供了一套完整的對本地?cái)?shù)據(jù)庫進(jìn)行管理的機(jī)制,對外提供了一系列的增、刪、改、查接口,也可以直接運(yùn)行用戶輸入的SQL語句來滿足復(fù)雜的場景需要。運(yùn)作機(jī)制如圖:
1、創(chuàng)建數(shù)據(jù)庫
//設(shè)置數(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)建的時(shí)候生成的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”);//構(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);
增刪改查操作都可以通過rdbStore的executeSql方法,直接執(zhí)行sql語句執(zhí)行。語句語法采用SQLite的語法。
對象關(guān)系型數(shù)據(jù)庫
HarmonyOS對象關(guān)系映射(Object Relational Mapping,ORM)數(shù)據(jù)庫是一款基于SQLite的數(shù)據(jù)庫框架,屏蔽了底層SQLite數(shù)據(jù)庫的SQL操作,針對實(shí)體和關(guān)系提供了增刪改查等一系列的面向?qū)ο蠼涌?。?yīng)用開發(fā)者不必再去編寫復(fù)雜的SQL語句, 以操作對象的形式來操作數(shù)據(jù)庫,提升效率的同時(shí)也能聚焦于業(yè)務(wù)開發(fā)。運(yùn)作機(jī)制如圖:
1、環(huán)境配置
1、添加相應(yīng)的jar包到模塊libs里面,相關(guān)文件可以在demo中找到。
2、在模塊的build.gradle中的對應(yīng)添加注解引用
//開啟注解
ohos {
compileOptions {
annotationEnabled true
}
}
//添加注解處理引用
dependencies {
annotationProcessor files(“。/libs/orm_annotations_java.jar”, “。/libs/orm_annotations_processor_java.jar”)
}
2、初始化數(shù)據(jù)庫配置
1、新建數(shù)據(jù)庫實(shí)現(xiàn)類
//entities里放置的是表對應(yīng)的javabean,version對應(yīng)數(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、新建表對應(yīng)的JavaBean
//對應(yīng)的數(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個(gè),同一時(shí)間只能支持一個(gè)寫操作!對象關(guān)系型數(shù)據(jù)的數(shù)據(jù)庫類型只支持基礎(chǔ)數(shù)據(jù)類型及Date、Time、Timestamp、Calendar、Blob(二進(jìn)制大對象)、Clob(字符大對象) 文中相關(guān)的代碼在git:https://github.com/maolinnan/HarmonyosClass
-
SQL
+關(guān)注
關(guān)注
1文章
764瀏覽量
44128 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3799瀏覽量
64388 -
關(guān)系型數(shù)據(jù)庫
+關(guān)注
關(guān)注
0文章
7瀏覽量
2334 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1975瀏覽量
30183
發(fā)布評論請先 登錄
相關(guān)推薦
評論