Room数据库使用

导入依赖

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());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值