繁体   English   中英

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

[英]How to check whether a Room Database exists?

“Room 持久性库在 SQLite 上提供了一个抽象层,以便在利用 SQLite 的全部功能的同时实现更强大的数据库访问。”

房间持久性库指南

所以我想出了这个方法

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。

有什么办法可以检查Room Database是否已经初始化?

有什么办法可以检查Room Database是否已经初始化?

如果房间数据库已经建立/打开(初始化),那么它将包含一个名为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();
  • 请注意,以上是原则性代码,尚未经过测试或运行,因此可能包含一些错误。

总是返回false。

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

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

final String DB_PATH = context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
private fun databaseFileExists(): Boolean {
        return try {
            File(getDatabasePath("MyInfoDatabase.db").absolutePath).exists()
        }catch (e: Exception){
            false
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM