美文网首页
使用Room库将数据保存在本地数据库中

使用Room库将数据保存在本地数据库中

作者: 贝贝beibei96 | 来源:发表于2018-04-08 14:01 被阅读143次

Room提供了一个SQLite的抽象层,可以在充分利用SQLite的同时访问流畅的数据库。

在Model - build.gradle添加依赖

implementation "android.arch.persistence.room:runtime:1.0.0"

处理不重要数量的结构化数据的应用程序可以从本地持久保存数据中获益。最常见的用例是缓存相关的数据。这样,当设备无法访问网络时,用户仍然可以在脱机状态下浏览该内容。设备重新联机后,任何用户启动的内容更改都会同步到服务器。

由于Room会为您处理这些问题,我们强烈建议使用Room而不是SQLite。但是,如果您更愿意直接使用SQLite API,请阅读使用SQLite保存数据

注意:为了在您的应用中使用Room, 请将架构组件 工件添加到您应用的build.gradle文件中。

房间内有三个主要部分:

这些组件以及它们与应用程序其余部分的关系如图1所示:


Room架构图

以下代码片段包含具有一个实体和一个DAO的示例数据库配置:

User.java

@Entity
public class User {
    @PrimaryKey
    private int uid;

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

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

    // Getters and setters are ignored for brevity,
    // but they're required for Room to work.
}

UserDao.java

@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 first_name LIKE :first AND "
           + "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}

AppDatabase.java

@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();

注意:在实例化AppDatabase对象时,应该遵循单例设计模式 ,因为每个 RoomDatabase 实例都相当昂贵,并且很少需要访问多个实例。

相关文章

网友评论

      本文标题:使用Room库将数据保存在本地数据库中

      本文链接:https://www.haomeiwen.com/subject/ffgphftx.html