美文网首页
android数据库组件Room的使用

android数据库组件Room的使用

作者: 大浪捉鱼 | 来源:发表于2022-11-05 10:25 被阅读0次

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;
    }
}

参考资料

https://developer.android.com/training/data-storage/room

相关文章

网友评论

      本文标题:android数据库组件Room的使用

      本文链接:https://www.haomeiwen.com/subject/herptdtx.html