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

时间:2019-09-10 17:04:21

标签: android android-room

  

“ Room持久性库在SQLite上提供了一个抽象层,以在利用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。

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

2 个答案:

答案 0 :(得分:1)

  

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

如果已经建立/打开了会议室数据库(初始化),那么它将包含一个名为 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();

答案 1 :(得分:0)

private fun databaseFileExists(): Boolean {
        return try {
            File(getDatabasePath("MyInfoDatabase.db").absolutePath).exists()
        }catch (e: Exception){
            false
        }
    }