“ 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。
有什么方法可以检查房间数据库是否已初始化?
答案 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
}
}