ActiveAndroid是一個(gè)開源的數(shù)據(jù)庫(kù)框架错邦,使我們?cè)贏ndroid中使用數(shù)據(jù)庫(kù)變得更為簡(jiǎn)單,今天我們就來看看這個(gè)數(shù)據(jù)庫(kù)框架的使用型宙。
1.引入ActiveAndroid
首先創(chuàng)建我們自己的項(xiàng)目撬呢,在我們的項(xiàng)目中引入ActiveAndroid,引入ActiveAndroid需要我們要在gradle
文件添加如下代碼妆兑,
repositories {
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
2.創(chuàng)建表及數(shù)據(jù)庫(kù)
2.1. 數(shù)據(jù)庫(kù)的配置及初始化
默認(rèn)情況下創(chuàng)建的數(shù)據(jù)庫(kù)名稱為Application.db魂拦,如果我們需要修改數(shù)據(jù)庫(kù)名稱以及進(jìn)行版本管理需要在在清單文件中配置數(shù)據(jù)庫(kù)名稱和數(shù)據(jù)庫(kù)版本號(hào):
<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="AA_DB_NAME" android:value="user.db" />
<meta-data android:name="AA_DB_VERSION" android:value="1" />
</application>
通過mete-data來配置數(shù)據(jù)庫(kù)名稱和數(shù)據(jù)庫(kù)版本號(hào),其中AA_DB_NAME
為數(shù)據(jù)庫(kù)名稱搁嗓,AA_DB_VERSION
為數(shù)據(jù)庫(kù)版本號(hào)芯勘,默認(rèn)為1。大家都知道版本號(hào)對(duì)于一個(gè)數(shù)據(jù)來說非常重要腺逛,數(shù)據(jù)庫(kù)的版本升級(jí)離不開版本號(hào)荷愕。對(duì)數(shù)據(jù)庫(kù)進(jìn)行升級(jí),在文章結(jié)尾咱們?cè)僬f.
2.2 創(chuàng)建存儲(chǔ)的Model類
在這里我們需要寫一個(gè)類繼承自Model這個(gè)類,如下:
@Table(name = "user_table", id = "_id")
public class UserEntity extends Model {
@Column
private String username;
@Column
private int age;
@Column
private String nickname;
public UserEntity() {
}
public UserEntity(int age, String nickname, String username) {
this.age = age;
this.nickname = nickname;
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
這里有幾個(gè)地方需要解釋一下:
1.類名上的@Table注解中有兩個(gè)值棍矛,分別是name="user_table"以及id="_id"安疗,其中name="user_table"表示一會(huì)生成的表的名稱為user_table,不寫的話默認(rèn)為實(shí)體類的名稱茄靠,id="_id"表示表的id字段的名稱茂契,默認(rèn)為Id,但是我們?cè)贏ndroid開發(fā)中一般將表中的id字段名稱定義為_id慨绳,所以這里設(shè)置id="_id",你也可以為其設(shè)置一個(gè)Model類中的ID參數(shù)
2.在每一個(gè)屬性名的上方都有一個(gè)@Column注解掉冶,該注解表示該字段是表中的一個(gè)字段,不加這個(gè)注解表示該字段不是表中的字段脐雪。
3.增刪改查
完成以上步驟之后厌小,接下來我們就可以來看看數(shù)據(jù)庫(kù)中的增刪改查操作了。
3.1增
添加數(shù)據(jù)战秋,我們只需要new一個(gè)實(shí)體類出來璧亚,然后調(diào)用這個(gè)實(shí)體類的save
方法即可,此方法來自于實(shí)體類繼承自Model類脂信。OK癣蟋,那我們來看一個(gè)簡(jiǎn)單的插入操作:
UserEntity userEntity = new UserEntity(56, "李四", "lisi");
userEntity.save();
創(chuàng)建一個(gè)UserEntity的實(shí)例透硝,然后調(diào)用該實(shí)例的save方法即可。數(shù)據(jù)已經(jīng)添加到表中后疯搅,這個(gè)save方法有一個(gè)返回值濒生,這個(gè)返回值表示當(dāng)前插入的數(shù)據(jù)的id。
3.2刪
針對(duì)刪除操作幔欧,ActiveAndroid提供了兩種解決方案罪治,一種是已知id,用戶需要按id對(duì)數(shù)據(jù)進(jìn)行刪除礁蔗,如下:
UserEntity.delete(UserEntity.class, 4);
表示刪除_id為4的數(shù)據(jù)觉义。
第二種條件刪除方式:
Delete delete = new Delete();
delete.from(UserEntity.class).where("age='89'").and("nickname='李四'").execute();
表示刪除age=89并且nickname=李四的數(shù)據(jù),當(dāng)然還有各種左連接右連接ActiveAndroid也都是支持的浴井。
3.3改
Update update = new Update(UserEntity.class);
update.set("nickname='王五'").where("age='89'").execute();
修改也是很簡(jiǎn)單的晒骇,上面這兩行代碼表示將age為89的數(shù)據(jù)中的nickname改為王五。這里不支持and語句滋饲,如果有多個(gè)查詢條件可以一起放在where語句中執(zhí)行厉碟,如下:
Update update = new Update(UserEntity.class);
update.set("nickname='王五'").where("age='89' and nickname='zhangsan'").execute();
3.4查
Select select = new Select();
List<UserEntity> list = select.from(UserEntity.class).execute();
for (UserEntity userEntity : list) {
Log.d("google_lenve_fb", "select: " + userEntity.toString());
}
上面代碼表示查詢user_table表中所有的數(shù)據(jù)喊巍,查詢結(jié)果直接返回一個(gè)List集合屠缭。我們可以直接遍歷這個(gè)List集合并將其顯示出來。查詢條件也支持where以及各種左連接崭参,右連接分頁查詢等呵曹。如下:
List<UserEntity> list = select.from(UserEntity.class)
.where("").and("").as("")
.groupBy("").having("").offset("").limit("")
.execute();
4.數(shù)據(jù)庫(kù)升級(jí)
使用ActiveAndroid進(jìn)行數(shù)據(jù)庫(kù)升級(jí)相較于上面的操作有點(diǎn)繞,假設(shè)我需要給數(shù)據(jù)庫(kù)中的表添加一個(gè)字段該怎么做呢何暮?有以下三個(gè)步驟:
1. 首先我需要修改我在上面定義的實(shí)體類奄喂,假設(shè)我想在添加一個(gè)性別字段,那我需要修改實(shí)體類如下:
@Table(name = "user_table", id = "_id")
public class UserEntity extends Model {
@Column
private String username;
@Column
private int age;
@Column
private String nickname;
@Column//性別字段海洼,新添加的字段
private String gender;
......
......
......
}
2. 在清單文件中修改數(shù)據(jù)庫(kù)的版本號(hào)跨新,新的版本號(hào)是原版本號(hào)加1,比如原來的版本號(hào)是1坏逢,那我現(xiàn)在改為2
3.添加遷移腳本域帐,最后我還需要添加一個(gè)數(shù)據(jù)庫(kù)遷移腳本。在我項(xiàng)目的assets
文件夾中添加一個(gè)子文件夾叫做migrations
是整,在這個(gè)字文件夾中添加遷移腳本肖揣,腳本的名稱為當(dāng)前數(shù)據(jù)庫(kù)最新版本號(hào).sql,假設(shè)我最新的數(shù)據(jù)庫(kù)版本號(hào)為2浮入,那么我的遷移腳本的名稱就為2.sql
龙优。針對(duì)我上面數(shù)據(jù)庫(kù)升級(jí)的情況(添加一個(gè)字段),我的遷移腳本內(nèi)容如下:
ALTER TABLE user_table ADD COLUMN nickname;
OK事秀,完成以上三步彤断,新字段就可以成功的添加到表中了野舶。