Room数据库的简易使用实例

前语:之前一直用的是greenDao,现在很久没用也忘了。目前项目使用的Room数据库,也就记录一下简易使用

依赖

 annotationProcessor 'androidx.room:room-compiler:2.3.0'

首先新建一个数据实体类

	@Entity
@TypeConverters(ChatItemConverter.class) //ChatItemConverter 是将List数据序列化的文件,否则数据库无法解析下面的public List<xx> xx,只能单数据。
public class Xx implements Serializable {

@PrimaryKey(autoGenerate = true)
public int id;
public String xx;
public int xx;
public boolean xx;
public long xx;
public String xx;
public List<xx> xx;

}

ChatItemConverter.java

	public class ChatItemConverter {
@TypeConverter
public String objectToString(List<HandAccountEntity> list) {
    return GsonInstance.getInstance().getGson().toJson(list);
}

@TypeConverter
public List<HandAccountEntity> stringToObject(String json) {
    Type listType = new TypeToken<List<HandAccountEntity>>(){}.getType();
    return GsonInstance.getInstance().getGson().fromJson(json, listType);
}

}

GsonInstance.java 解析Gson

public class GsonInstance {
private static GsonInstance INSTANCE;
private static Gson gson;

public static GsonInstance getInstance() {
    if (INSTANCE == null) {
        synchronized (GsonInstance.class) {
            if (INSTANCE == null) {
                INSTANCE = new GsonInstance();
            }
        }
    }
    return INSTANCE;
}

public Gson getGson() {
    if (gson == null) {
        synchronized (GsonInstance.class) {
            if (gson == null) {
                gson = new Gson();
            }
        }
    }
    return gson;
}

}

新建初始化单例Room数据库文件

	public class DatabaseManager2 {

private volatile static DatabaseManager2 instance;

public static DatabaseManager2 getInstance(Context context) {
    if (instance == null) {
        synchronized (DatabaseManager2.class) {
            if (instance == null) {
                instance = new DatabaseManager2(context.getApplicationContext());
            }
        }
    }
    return instance;
}

private DatabaseManager2(Context context) {
    myDatabase = Room.databaseBuilder(context, MyFileDatabase.class, "xx.db")
            .fallbackToDestructiveMigration()
            .build();
}

private MyFileDatabase myDatabase;

public MyFileDatabase getMyDatabase() {
    return myDatabase;
}
}

新建对应的数据库增删改查文件(忘了是不是自动生成的了…)
这里可以自定义查询的数据库代码

@Dao
public interface xxDao{

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(xx... beans);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(List<xx> list);

@Delete
void delete(xx... beans);

@Delete
void delete(List<xx> list);

@Query("SELECT * FROM File ORDER BY date DESC")
// @Query("SELECT * FROM File ORDER BY date DESC") //定义查询代码
List<xx> query();

@Query("SELECT * FROM xx where id = :id")
xx getxxInfo(int id);

@Update
int update(xx... beans);

}

然后跑一个或者点上面的虫子🐛就会自动生成数据库

以下是自动生成的文件MyXXDatabase.java

@Database(entities = {File.class}, version = 1, exportSchema = false)
public abstract class MyXXDatabase extends RoomDatabase {

public abstract xxDao xxDao();
}

数据库生成OK,接下来就是增删改查了

xxDao dao = DatabaseManager2.getInstance(requireActivity()).getMyDatabase().xxDao();
	dao.insert(xx);
	dao.delete(xx);
	dao.query();
	dao.update(xx);

附上Rxjava调用

			Observable.just(1)
            .doOnNext(new Consumer<Integer>() {
                @Override
                public void accept(Integer integer) throws Exception {
                   xxDao.update(xx);
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Integer>() {
                @Override
          public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
                        compositeDisposable.add(d);
//                        showLoading();
                }

                @Override
                public void onNext(@io.reactivex.annotations.NonNull Integer integer) {
//                        cancelLoading();
                    showMessage("修改成功");
                    finish();

                }

                @Override
                public void onError(@io.reactivex.annotations.NonNull Throwable e) {
//                        cancelLoading();
                    showMessage(e.getMessage());
                }

                @Override
                public void onComplete() {
                }
            });

结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值