前语:之前一直用的是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() {
}
});
结束。