Room

ORMLite蛤袒、GreenDAO

Room 持久性庫(kù)在 SQLite 上提供了一個(gè)抽象層,以便在充分利用 SQLite 的強(qiáng)大功能的同時(shí)葫录,能夠流暢地訪問(wèn)數(shù)據(jù)庫(kù)阀湿。具體來(lái)說(shuō),Room 具有以下優(yōu)勢(shì):

  • 針對(duì) SQL 查詢的編譯時(shí)驗(yàn)證瑰妄。
  • 可最大限度減少重復(fù)和容易出錯(cuò)的樣板代碼的方便注解陷嘴。
  • 簡(jiǎn)化了數(shù)據(jù)庫(kù)遷移路徑。

出于這些方面的考慮间坐,我們強(qiáng)烈建議您使用 Room灾挨,而不是直接使用 SQLite API

1.添加依賴

app build.gradle

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
dependencies {
    implementation("androidx.room:room-runtime:2.4.3")
    annotationProcessor("androidx.room:room-compiler:2.4.3")
}

2.主要組件

1.數(shù)據(jù)庫(kù)類竹宋,用于保存數(shù)據(jù)庫(kù)并作為應(yīng)用持久性數(shù)據(jù)底層連接的主要訪問(wèn)點(diǎn)劳澄。
2.數(shù)據(jù)實(shí)體,用于表示應(yīng)用的數(shù)據(jù)庫(kù)中的表蜈七。
3.數(shù)據(jù)訪問(wèn)對(duì)象(DAO)秒拔,提供您的應(yīng)用可用于查詢、更新飒硅、插入和刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)的方法砂缩。


image.png

3.數(shù)據(jù)實(shí)體

@Entity
public class User {
    @PrimaryKey
    public int uid;

    @ColumnInfo(name = "first_name")
    public String firstName;

    @ColumnInfo(name = "last_name")
    public String lastName;
}

4.數(shù)據(jù)訪問(wèn)對(duì)象(DAO)

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}

5.數(shù)據(jù)庫(kù)

@Database(entities = {User.class, Student.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
    public abstract StudentDao studentDao();
}

6.使用

AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
UserDao userDao = db.userDao();
new Thread(
    () -> {
        userDao.insertALL(new User("zhang", 20));
        List<User> all = userDao.getAll();
        System.out.println(all);

        userDao.delete(all.get(0));
        List<User> all2 = userDao.getAll();
        System.out.println(all2);

        System.out.println("------student----");
        StudentDao studentDao = db.studentDao();
        studentDao.insert(new Student(2, "li", 98));
        List<Student> all3 = studentDao.getAll();
        System.out.println(all3);
    }
).start();

7.Dao月LiveData聯(lián)合使用

@Query("SELECT * FROM student")
public LiveData<List<Student>> getAllLive();

8.數(shù)據(jù)庫(kù)升級(jí)

MyDatabase.class里(version=2),數(shù)據(jù)庫(kù)版本從1升級(jí)到2三娩,
 mInstance = Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, "my_db.db")
                            .addMigrations(MIGRATION_1_2)//添加MIGRATION_1_2
                            .build();

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("ALTER TABLE student ADD COLUMN sex INTEGER NOT NULL DEFAULT 1");
        }
    };

同步去修改Student表庵芭,增加sex字段

升級(jí)是逐步升級(jí) 1->2, 2->3

9.銷毀重建

修改表的字段類型,需要
1.新建一個(gè)temp雀监,
2.復(fù)制數(shù)據(jù)双吆,
3.刪除原表,
4.重命名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末会前,一起剝皮案震驚了整個(gè)濱河市好乐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌回官,老刑警劉巖曹宴,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異歉提,居然都是意外死亡笛坦,警方通過(guò)查閱死者的電腦和手機(jī)区转,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)版扩,“玉大人废离,你說(shuō)我怎么就攤上這事〗嘎” “怎么了蜻韭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)柿扣。 經(jīng)常有香客問(wèn)我肖方,道長(zhǎng),這世上最難降的妖魔是什么未状? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任俯画,我火速辦了婚禮,結(jié)果婚禮上司草,老公的妹妹穿的比我還像新娘艰垂。我一直安慰自己,他們只是感情好埋虹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布猜憎。 她就那樣靜靜地躺著,像睡著了一般搔课。 火紅的嫁衣襯著肌膚如雪胰柑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天辣辫,我揣著相機(jī)與錄音旦事,去河邊找鬼。 笑死急灭,一個(gè)胖子當(dāng)著我的面吹牛姐浮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葬馋,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼卖鲤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了畴嘶?” 一聲冷哼從身側(cè)響起蛋逾,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窗悯,沒(méi)想到半個(gè)月后区匣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒋院,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年亏钩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莲绰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姑丑,死狀恐怖蛤签,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情栅哀,我是刑警寧澤震肮,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站留拾,受9級(jí)特大地震影響戳晌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痴柔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一躬厌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竞帽,春花似錦、人聲如沸鸿捧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匙奴。三九已至堆巧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泼菌,已是汗流浹背谍肤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哗伯,地道東北人荒揣。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像焊刹,于是被迫代替她去往敵國(guó)和親系任。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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