导入依赖
def roomVersion = "2.3.0"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
实体类
@Entity(tableName = "user" )//tableName设置表名
public class User {
//主键 自增
@PrimaryKey(autoGenerate = true)
private int uid;
//唯一性
@ColumnInfo(index = true)
private String name;
//属性名称改为 "pass_word"
@ColumnInfo(name = "pass_word")
@NonNull
private String passWord;
private String tag;
@ColumnInfo(name = "is_online")
private Boolean isOnline;
public User() {
}
//不加忽略注解会出现 There are multiple good constructors and Room will ... 问题
@Ignore
public User(String name, String passWord, String tag) {
this.name = name;
this.passWord = passWord;
this.tag = tag;
this.isOnline = false;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
......
}
Dao
@Dao
public interface UserDao {
//查
@Query("SELECT * FROM user")
List<User> getAll();
@Query("SELECT * FROM user WHERE uid IN (:userIds)")
List<User> loadAllByIds(int[] userIds);
@Query("SELECT * FROM user WHERE name LIKE :name AND " + "pass_word LIKE :passWord LIMIT 1")
User findByName(String name, String passWord);
@Query("SELECT * FROM user WHERE is_online LIKE :online LIMIT 1")
User findByOnline(Boolean online);
//改
@Update
void updateUser(User user);
//增
//OnConflictStrategy.REPLACE:取代旧数据同时继续事务。
//OnConflictStrategy.ROLLBACK:回滚事务。@Deprecated
//OnConflictStrategy.ABORT:终止事务。
//OnConflictStrategy.FAIL:事务失败。@Deprecated
//OnConflictStrategy.IGNORE:忽略冲突。
@Insert(onConflict = OnConflictStrategy.IGNORE)
//可以返回long别返回int会出现 Not sure how to handle insert method's return type问题
long insert(User users);
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insert(User... users);
//删
@Delete
void delete(User user);
@Query("DELETE FROM user where name=:name")
void delete(String name);
}
AppDatabase
//Room数据库不能在主线程中进行操作,需要新开子线程
//如果出现 Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.
//在build gradle中添加(推荐)
//
// android {
// ...
// defaultConfig {
// ...
// javaCompileOptions {
// annotationProcessorOptions {
// arguments = ["room.schemaLocation":
// "$projectDir/schemas".toString()]
// }
// }
// }
// }
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
使用
AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
db.userDao().insert(new User());