Room是什么?
Room是google官方推薦的數據庫組件,不需要直接操作SQLite API,我們在項目中只需要處理3種類:數據庫類、數據實體類和數據訪問對象(DAO)
1、引入Room
app的build.gradle的dependencies 里加入
implementation "androidx.room:room-runtime:2.4.3"
annotationProcessor "androidx.room:room-compiler:2.4.3"
2、數據實體類
@Entity(tableName = "history_server")
public class ServerModel {
@PrimaryKey
@NonNull
private String id;
@ColumnInfo
private String name;
@ColumnInfo
private String host;
@ColumnInfo
private String version;
@ColumnInfo
private String lang;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
}
詳細的數據實體類使用,請參考官方文檔https://developer.android.com/training/data-storage/room/defining-data
3、數據訪問對象(DAO)
@Dao
public interface ServerDao {
@Query("SELECT * FROM history_server")
List<ServerModel> getAll();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(ServerModel model);
@Delete
void delete(ServerModel model);
}
增刪改查都在DAO里封裝好,注意要在子線程里操作DAO,例如
private void insert(ServerModel model) {
new Thread(() -> {
MyApplication.getDb().serverDao().insert(model);
}).start();
}
詳細請參考官方文檔https://developer.android.com/training/data-storage/room/accessing-data
4、數據庫類
@Database(entities = {ServerModel.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
public abstract ServerDao serverDao();
}
在application中實例化一個AppDatabase,方便在項目中獲取這個db對象,有了db對象,就可以訪問各種DAO,進行各種具體的數據表讀寫操作了
public class MyApplication extends Application {
private static Context instance;
private static AppDatabase db;
@Override
public void onCreate()
{
super.onCreate();
instance = getApplicationContext();
db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "myapp_db").build();
}
public static Context getContext()
{
return instance;
}
public static AppDatabase getDb() {
return db;
}
}