欢迎光临
我们一直在努力

Jetpack Room - Room 查询返回列表无需判空、LIKE 关键字

Room 查询返回列表无需判空

1、基本介绍
  • Room 的 @Query 方法返回 List 类型时,永远不会返回 null

  • 没有数据时返回空列表,有数据时返回包含元素的列表

  • 2、演示
    (1)Application
    • MyApplication.java

    public class MyApplication extends Application {

    private static Context context;

    @Override
    public void onCreate() {
    super.onCreate();

    context = this;
    }

    public static Context getContext() {
    return context;
    }
    }

    (2)Entity
    • Member.java

    @Entity(tableName = "Member")
    public class Member {

    @PrimaryKey(autoGenerate = true)
    private Integer id;

    @ColumnInfo(name = "name")
    private String name;

    @ColumnInfo(name = "age")
    private Integer age;

    public Member() {
    }

    @Ignore
    public Member(String name, Integer age) {
    this.name = name;
    this.age = age;
    }

    @Ignore
    public Member(Integer id, String name, Integer age) {
    this.id = id;
    this.name = name;
    this.age = age;
    }

    public Integer getId() {
    return id;
    }

    public void setId(Integer id) {
    this.id = id;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public Integer getAge() {
    return age;
    }

    public void setAge(Integer age) {
    this.age = age;
    }

    @Override
    public String toString() {
    return "Member{" +
    "id=" + id +
    ", name='" + name + '\\'' +
    ", age=" + age +
    '}';
    }
    }

    (3)Dao
    • MemberDAO.java

    @Dao
    public interface MemberDAO {

    @Insert
    void insert(Member member);

    @Query("DELETE FROM Member")
    void deleteAll();

    @Query("SELECT * FROM Member")
    List<Member> queryAll();

    @Query("SELECT * FROM Member WHERE name = :name")
    Member queryByName(String name);

    @Query("SELECT * FROM Member WHERE name LIKE '%' || :name || '%'")
    List<Member> queryByNameLike(String name);
    }

    (4)Database
    • MyDatabase.java

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

    public static final String DATABASE_NAME = "test.db";

    private static MyDatabase myDatabase;

    public static MyDatabase getInstance() {
    if (myDatabase == null) {
    myDatabase = Room.databaseBuilder(MyApplication.getContext(), MyDatabase.class, DATABASE_NAME).build();
    }
    return myDatabase;
    }

    public abstract MemberDAO getMemberDAO();
    }

    (5)Test

    new Thread(() -> {
    MemberDAO memberDAO = MyDatabase.getInstance().getMemberDAO();

    memberDAO.deleteAll();

    Log.i(TAG, "没有数据时");

    List<Member> members = memberDAO.queryAll();
    Member member = memberDAO.queryByName("jack");
    List<Member> membersLike = memberDAO.queryByNameLike("m");

    Log.d(TAG, "members: " + members);
    Log.d(TAG, "member: " + member);
    Log.d(TAG, "membersLike: " + membersLike);

    memberDAO.insert(new Member("Jack", 18));
    memberDAO.insert(new Member("Tom", 19));
    memberDAO.insert(new Member("Smith", 20));

    Log.i(TAG, "有数据时");

    List<Member> members2 = memberDAO.queryAll();
    Member member2 = memberDAO.queryByName("Jack");
    List<Member> membersLike2 = memberDAO.queryByNameLike("m");

    Log.d(TAG, "members: " + members2);
    Log.d(TAG, "member: " + member2);
    Log.d(TAG, "membersLike: " + membersLike2);
    }).start();

    # 输出结果

    没有数据时
    members: []
    member: null
    membersLike: []
    有数据时
    members: [Member{id=4, name='Jack', age=18}, Member{id=5, name='Tom', age=19}, Member{id=6, name='Smith', age=20}]
    member: Member{id=4, name='Jack', age=18}
    membersLike: [Member{id=5, name='Tom', age=19}, Member{id=6, name='Smith', age=20}]


    LIKE 关键字

    1、基本介绍
    • SQLite 中的 LIKE 关键字用于模式匹配,通常与 WHERE 子句结合使用
    通配符描述
    % 代表零个或多个字符
    _ 代表单个字符
    2、基本使用

    — 查找名字以 '张' 开头的记录

    SELECT * FROM users WHERE name LIKE '张%';

    — 查找邮箱包含 'gmail' 的记录

    SELECT * FROM users WHERE email LIKE '%gmail%';

    — 查找名字第二个字符是 'a' 的记录

    SELECT * FROM users WHERE name LIKE '_a%';

    // Room 中的使用

    @Query("SELECT * FROM Member WHERE name LIKE '%' || :name || '%'")
    List<Member> queryByNameLike(String name);

    赞(0)
    未经允许不得转载:171主机测评 » Jetpack Room - Room 查询返回列表无需判空、LIKE 关键字
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址