數(shù)據(jù)庫(kù)框架ActiveAndroid的使用

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事秀,完成以上三步彤断,新字段就可以成功的添加到表中了野舶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宰衙,隨后出現(xiàn)的幾起案子筒愚,更是在濱河造成了極大的恐慌,老刑警劉巖菩浙,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巢掺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡劲蜻,警方通過查閱死者的電腦和手機(jī)陆淀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來先嬉,“玉大人轧苫,你說我怎么就攤上這事∫呗” “怎么了含懊?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)衅胀。 經(jīng)常有香客問我岔乔,道長(zhǎng)席赂,這世上最難降的妖魔是什么匕垫? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮馍管,結(jié)果婚禮上掸掏,老公的妹妹穿的比我還像新娘茁影。我一直安慰自己,他們只是感情好丧凤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布募闲。 她就那樣靜靜地躺著,像睡著了一般愿待。 火紅的嫁衣襯著肌膚如雪浩螺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天呼盆,我揣著相機(jī)與錄音年扩,去河邊找鬼。 笑死访圃,一個(gè)胖子當(dāng)著我的面吹牛厨幻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼况脆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼饭宾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起格了,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤看铆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盛末,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弹惦,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年悄但,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棠隐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡檐嚣,死狀恐怖助泽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嚎京,我是刑警寧澤嗡贺,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站鞍帝,受9級(jí)特大地震影響诫睬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膜眠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一岩臣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宵膨,春花似錦、人聲如沸炸宵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽土全。三九已至捎琐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裹匙,已是汗流浹背瑞凑。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留概页,地道東北人籽御。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親技掏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铃将,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)哑梳,斷路器劲阎,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 夏天到了,經(jīng)吵纺郏看到街上各種露背美女偎捎,真是羨慕。自己也想穿序攘,可是我肩膀一下腰部往上長(zhǎng)了一些顆粒狀的小疙瘩茴她,用手摸感覺...
    時(shí)尚微觀閱讀 25,576評(píng)論 0 1
  • 莫名其妙疼得發(fā)慌 從最里面那一層開始 像打石子一樣一圈一圈漾開地、顫抖地疼 還是躲啊 未及陽光程奠,只是一個(gè)“正痴衫危” ...
    我不會(huì)在這里發(fā)東西了閱讀 417評(píng)論 3 2
  • 愛情本是你來我往才能走得下去 一個(gè)人主動(dòng)久了也會(huì)疲憊己沛。 不要讓我始終聽不到 你對(duì)我愛的回聲, 不要讓我像傻子一樣虛...
    不小不閱讀 343評(píng)論 0 0
  • 主題班會(huì)。遠(yuǎn)離水的河 這是一份來自青山秀水的煩憂 像母親一樣囑托距境,又啰嗦 以至于總讓我瑟縮―― 年幼時(shí)阿婆摔打一對(duì)...
    洛城未晞閱讀 232評(píng)論 0 4