Room數(shù)據(jù)庫

Room數(shù)據(jù)庫


1.Room使用

Step1:Gradle文件的dependencies中添加以下代碼
//room數(shù)據(jù)庫
compile "android.arch.persistence.room:runtime:1.1.0-beta2"                     
annotationProcessor "android.arch.persistence.room:compiler:1.1.0-beta2"
//rxjava2對(duì)room支持
compile "android.arch.persistence.room:rxjava2:1.1.0-beta2"                     

Step2:創(chuàng)建實(shí)體類文件,比如UserModel.java

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.Ignore;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;

@Entity(tableName = "user_table")       //數(shù)據(jù)表名字user_table
public class UserModel {

    @PrimaryKey(autoGenerate = false)   //主鍵均函,自動(dòng)增長=false
    @ColumnInfo(name = "user_id")       //userId數(shù)據(jù)表字段為user_id
    @NonNull                            //主鍵設(shè)置為非空
    private String userId;              //用戶id

    @ColumnInfo(name = "user_name")     //userName數(shù)據(jù)表字段為user_name众眨,默認(rèn)允許空值
    private String userName;            //用戶名(公司或個(gè)人姓名)

    @ColumnInfo(name = "user_pet_name")
    private String userPetName;         //用戶呢稱(系統(tǒng)生成炼团,之后可以修改)

    @ColumnInfo(name = "user_phone")
    private String userPhone;           //用戶電話

    @ColumnInfo(name = "user_icon")
    private String userIcon;            //用戶頭像

    @ColumnInfo(name = "vip_type")
    private int vipType;                //用戶vip類型

    @ColumnInfo(name = "create_time")
    private long createTime;            //用戶注冊(cè)時(shí)間

    @ColumnInfo(name = "sex")
    private int sex;                    //用戶性別 1-->男 2-->女

    @ColumnInfo(name = "integral")
    private double integral;            //積分

    @ColumnInfo(name = "id_card_number")
    private String idCardNumber;        //身份證號(hào)

    @ColumnInfo(name = "email")
    private String email;               //用戶郵箱

    @ColumnInfo(name = "status")
    private int status;                 //用戶狀態(tài) 0-->禁用  1-->正常

    public UserModel() {                //Room調(diào)用的構(gòu)造函數(shù)

    }

    @Ignore                             //有2個(gè)構(gòu)造函數(shù)估脆,讓Room忽略掉這個(gè)贫导,使用上面一個(gè)構(gòu)造函數(shù)
    public UserModel(String userIcon, String userName) {
        this.userIcon = userIcon;
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "UserModel{" +
                "userId='" + userId + '\'' +
                ", userName='" + userName + '\'' +
                ", userPetName='" + userPetName + '\'' +
                ", userPhone='" + userPhone + '\'' +
                ", userIcon='" + userIcon + '\'' +
                ", vipType=" + vipType +
                ", createTime=" + createTime +
                ", sex=" + sex +
                ", integral=" + integral +
                ", idCardNumber='" + idCardNumber + '\'' +
                ", email='" + email + '\'' +
                ", status=" + status +
                '}';
    }

    //=================================================================
    //  以為字段設(shè)置成private弄兜,提供get\set方法給room使用
    //=================================================================
    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPetName() {
        return userPetName;
    }

    public void setUserPetName(String userPetName) {
        this.userPetName = userPetName;
    }

    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }

    public String getUserIcon() {
        return userIcon;
    }

    public void setUserIcon(String userIcon) {
        this.userIcon = userIcon;
    }

    public int getVipType() {
        return vipType;
    }

    public void setVipType(int vipType) {
        this.vipType = vipType;
    }

    public long getCreateTime() {
        return createTime;
    }

    public void setCreateTime(long createTime) {
        this.createTime = createTime;
    }

    public int getSex() {
        return sex;
    }

    public String getSexString() {
        return getSex() == 1 ? Util.getString(R.string.man) : Util.getString(R.string.woman);
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    public double getIntegral() {
        return integral;
    }

    public void setIntegral(double integral) {
        this.integral = integral;
    }

    public String getIdCardNumber() {
        return idCardNumber;
    }

    public void setIdCardNumber(String idCardNumber) {
        this.idCardNumber = idCardNumber;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}
Step3:創(chuàng)建Dao層
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;

import io.reactivex.Flowable;

//Dao層用@Dao標(biāo)識(shí)
@Dao    
public interface UserModelDao {

    //查詢語句
    @Query("SELECT * FROM user_table WHERE user_id = :id")
    Flowable<UserModel> getUserModel(String id);

    //插入讥电,onConflict = OnConflictStrategy.REPLACE表示插入有沖突時(shí)候替代
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(UserModel userModel);

    @Delete
    void delete(UserModel userModel);
}
Step4:創(chuàng)建提供Dao層的抽象類御毅,繼承RoomDatabase
import android.arch.persistence.room.Database;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.RoomDatabase;

//創(chuàng)建一個(gè)抽象類。用@Database標(biāo)識(shí)羽杰,表示是RoomDatabase
//entities = {UserModel.class}渡紫,表示數(shù)據(jù)庫存儲(chǔ)的實(shí)體類有UserModel
//version = 1到推,表示數(shù)據(jù)庫版本號(hào)為1
@Database(entities = {UserModel.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

    //抽象方法,提供UserModelDao
    public abstract UserModelDao getUserModelDao();

    //單例
    private static volatile AppDatabase instance;

    //獲取單例
    public static AppDatabase getInstance() {
        if (instance == null) {
            synchronized (AppDatabase.class) {
                if (instance == null) {
                    //Room為我們實(shí)現(xiàn)抽象類
                    instance = Room.databaseBuilder(Util.getApplication(),
                            AppDatabase.class,
                            Constant.DATABASE_NAME).build();
                }
            }
        }
        return instance;
    }
}
Step5:使用
AppDatabase.getInstance()
                .getUserModelDao()
                .insert(userModel);

常見問題

  • 無法import RoomDatabase
    • 因?yàn)镽oomDatabase需要com.android.support在26.0.1之后
    • 項(xiàng)目中com.android.support修改為26.0.1之后就可以了
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惕澎,一起剝皮案震驚了整個(gè)濱河市莉测,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唧喉,老刑警劉巖捣卤,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異八孝,居然都是意外死亡董朝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門干跛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來子姜,“玉大人,你說我怎么就攤上這事驯鳖∠醒” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵浅辙,是天一觀的道長扭弧。 經(jīng)常有香客問我,道長记舆,這世上最難降的妖魔是什么鸽捻? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮泽腮,結(jié)果婚禮上御蒲,老公的妹妹穿的比我還像新娘。我一直安慰自己诊赊,他們只是感情好厚满,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碧磅,像睡著了一般碘箍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲸郊,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天丰榴,我揣著相機(jī)與錄音,去河邊找鬼秆撮。 笑死四濒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盗蟆,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼戈二,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了喳资?” 一聲冷哼從身側(cè)響起挽拂,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骨饿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體台腥,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宏赘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黎侈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片察署。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖峻汉,靈堂內(nèi)的尸體忽然破棺而出贴汪,到底是詐尸還是另有隱情,我是刑警寧澤休吠,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布扳埂,位于F島的核電站,受9級(jí)特大地震影響瘤礁,放射性物質(zhì)發(fā)生泄漏阳懂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一柜思、第九天 我趴在偏房一處隱蔽的房頂上張望岩调。 院中可真熱鬧,春花似錦赡盘、人聲如沸号枕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葱淳。三九已至,卻和暖如春霉咨,著一層夾襖步出監(jiān)牢的瞬間蛙紫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工途戒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坑傅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓喷斋,卻偏偏與公主長得像唁毒,于是被迫代替她去往敵國和親蒜茴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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