iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0

簡介

Room 是 Google 提供的套件,專門用來管理本地端資料的儲存等各種行為,透過標籤來簡化以往如 SQLite 這種需要寫一堆 SQL 語法的資料庫操作,讓code看起來更簡潔,Room 也讓 Database 操作及建立變得更簡單,真的是資料庫相關應用的大好工具。

範例

  • Entity(資料表)
@Entity(tableName = "Account")
public class MyData {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String account;
    private String password;
    private String platform;
    private String note;

    public MyData(String account,String password,String platform,String note){
        this.account = account;
        this.password = password;
        this.platform = platform;
        this.note = note;
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPlatform() {
        return platform;
    }

    public void setPlatform(String platform) {
        this.platform = platform;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }
}

透過@Entity標籤來標示資料表,後面的tableName可取可不取,沒取的話則會用class名稱代表資料表名稱。

  • Dao(CRUD)
    Dao負責各種CRUD,可以透過標籤簡化程式碼或者使用SQL語法。
@Dao
public interface AccountDao {
    String tableName = "Account";
    //CRUD
    //--------------新增資料--------------------//
    //表示遇到衝突時,替換(REPLACE)
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAccount(MyAccount myAccount);
    //--------------撈取資料--------------------//
    //SQL語法
    @Query("SELECT * FROM " + tableName)
    List<MyAccount> getAllAccount();
    //--------------更新資料--------------------//
    @Update
    void updataAccount(MyAccount myAccount);
    //--------------刪除資料--------------------//
    @Delete
    void deleteAccount(MyAccount myAccount);
}
  • 資料庫建立

透過@Database標示資料庫,此處與資料表(Entitiy)和Dao做連接,並完成建立資料庫之工作。

@Database(entities = {MyAccount.class}, version = 1,exportSchema = true)
public abstract class DataBase extends RoomDatabase {
    public static final String DB_NAME = "Account.db";
    public static volatile DataBase instance;

    //單例資料庫
    public static synchronized DataBase getInstance(Context context){
        if(instance == null){
            instance = create(context);
        }
        return instance;
    }

    //建立資料庫
    private static DataBase create(final Context context){
        return Room.databaseBuilder(context,DataBase.class,DB_NAME)
                .build();
    }
    //獲得Dao
    public abstract AccountDao getAccountDao();
}
  • 執行
//獲取資料
DataBase.getInstance(mContext).getAccountDao().getAllData()
//更新
DataBase.getInstance(this).getAccountDao().updateData(data);
//新增
DataBase.getInstance(this).getAccountDao().insertData(data);
//刪除
DataBase.getInstance(this).getAccountDao().deleteData(myData.get(position).getId());

以上就是簡單的Room使用,學會這強大的工具,在未來資料庫處理上將會事半功倍,再也不怕冗長的SQL語法了。


上一篇
精華筆記 Day23 -- Retrofit
下一篇
精華筆記 Day25 - Retrofit+RxJava/Room+RxJava
系列文
android studio 30天 精華筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言