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;
}
}
网友评论