"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/