android - 如何检查房间数据库是否存在?

标签 android android-room

"The Room persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite."

Room Persistence Library Guide

所以我想出了这个方法

public static boolean isDbExist(Context context)
{
    final String DATABASE_NAME = "tippie";
    final String DB_PATH = context.getDatabasePath(DATABASE_NAME + ".db").getAbsolutePath();
    SQLiteDatabase db;
    try
    {
        db = SQLiteDatabase.openDatabase(DB_PATH, null,
                SQLiteDatabase.OPEN_READONLY);
        db.close();
    } catch (SQLiteException e) { return false; }
    return true;
}

总是返回 false。

有什么方法可以检查房间数据库是否已经初始化?

最佳答案

Is there any way to check whether Room Database has been initialized?

如果房间数据库已经建立/打开(初始化),那么它将包含一个名为room_master_table 的表。

因此,如果打开成功,您可以运行查询以查看该表是否存在。

例如

Cursor csr = db.query("sqlite_master",null,"name = ?",new String[]{"room_master_table"},null,null,null);
if (csr.getCount() > 0) {
    //db is a room database
} else {
    // db is not a room database
}
csr.close();
  • 请注意,以上是原理代码,尚未经过测试或运行,因此可能包含一些错误。

which always return false.

我怀疑问题是您将 .db 附加到数据库名称。 .db 扩展名不是必需的。如果在打开数据库(在房间中构建)时使用不带扩展名的数据库名称,则文件名将没有扩展名。

如果您始终只使用 DATABASE_NAME,那么您可能不会遇到问题:-

final String DB_PATH = context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

关于android - 如何检查房间数据库是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57875403/

相关文章:

android - 如何动态创建 fragment 寻呼机适配器

android - 为什么这个 ImageView 没有与其父级正确对齐?

android - 应用程序意外停止。请再试一次

android - AltBeacon 库 - 减少蓝牙扫描周期

java - 在 Android 上插入数据库之前,如何检查 Room 数据库中是否存在数据?

android - 加载由 ViewPager 管理的 Android 谷歌地图 fragment

android - 无数据丢失的房间数据库架构更新

Android Room : App crashes out of nowhere (Fatal signal 11 (SIGSEGV), 代码 1 (SEGV_MAPERR),故障地址 0x0)

android - 如何从 Android RoomDB 中的字符串列表中查询特定字符串

android - 当前的 JDK 版本 1.8 有一个 bug 会阻止 Room 增量