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