Room
https://developer.android.google.cn/training/data-storage/room
- app/build.gradle中添加依赖声明。
- 创建实体类,添加对应的注解。
- 创建Dao接口,接口中的方法对应crud操作。
- 创建继承自RoomDatabase的抽象类,并在类中创建数据库的实例。
实体类,对应数据库中的表:
@Entity(tableName = "user_table")
public class UserEntity {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "name")
public String name;
@ColumnInfo(name = "address")
public String address;
public UserEntity (String name, String address) {
this.name= name;
this.address= address;
}
}
Dao接口,每个方法对应一条sql语句:
@Dao
public interface UserEntityDao {
@Query("SELECT * FROM user_table")
List<UserEntity> queryAll();
@Insert
void insetItem(UserEntity userEntity);
@Insert
void insertAll(UserEntity... userEntities);
}
创建数据库实例:
@Database(entities = {UserEntity.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
private static MyDatabase sMyDatabase;
public abstract UserEntityDao mUserEntityDao();
public static MyDatabase getMyDatabase() {
if (sMyDatabase== null) {
synchronized (MyDatabase .class) {
sMyDatabase= Room.databaseBuilder(BaseApplication.getAppContext(),
MyDatabase .class, "demo_db").build();
}
}
return sMyDatabase;
}
}
使用:
public void loadHistories() {
new Thread(() -> {
MyDatabase database = MyDatabase .getMyDatabase();
List<UserEntity> list = database.mUserEntityDao().queryAll();
}).start();
}
LitePal
github:https://github.com/guolindev/LitePal
- app/build.gradle中添加依赖声明。
- main/assets文件夹下添加litepal.xml文件。
- application中初始化。
- 实体类要继承LitePalSupport,才能进行crud操作,不需要创建数据库的实例。
注意:
- 使用userAll方法更新数据库时,实体类中需要有无参的构造方法。
- 修改数据库模型,litepal.xml修改版本号即可,但是有一些LitePal无法处理的升级条件,并且将清除升级表中的所有数据:
添加一个注释为的字段unique = true。
将字段的注释更改为unique = true。
将字段的注释更改为nullable = false。
GreenDao
github:https://github.com/greenrobot/greenDAO
- project/build.gradle和app/build.gradle中添加依赖声明。
- 实体类对应数据库表,使用@Entity注解标记,使用@Id修改的属性必须是long类型。创建完实体类后进行编译,会自动生成对应实体类的Dao类。
- 创建Helper、Database、DaoSession 的对象,因为DevOpenHelper将在架构更改时删除所有表(在onUpgrade()中)。最好创建并使用DaoMaster.OpenHelper的子类。
- 获取自动生成的实体类的Dao对象,进行crud操作。
public class GreenDaoManager {
private static GreenDaoManager sInstance;
private final DaoSession mDaoSession;
public static GreenDaoManager getInstance() {
if (sInstance == null) {
synchronized (GreenDaoManager.class) {
sInstance = new GreenDaoManager();
}
}
return sInstance;
}
private GreenDaoManager() {
DaoMaster.OpenHelper helper = new MyOpenHelper(BaseApplication.getApplication(), "greendao_user.db");
Database db = helper.getWritableDb();
mDaoSession = new DaoMaster(db).newSession();
}
public GreenDaoUserEntityDao getUserEntityDao() {
return mDaoSession.getGreenDaoUserEntityDao();
}
public void insertAllUsers(List<GreenDaoUserEntity> lists) {
if (lists != null) {
for (GreenDaoUserEntity userEntity : lists) {
getUserEntityDao().insert(userEntity);
}
}
}
}