查询Android数据库是否存在!

All*_*lly 64 database android

我已经为我的Android应用程序创建了一个包含静态数据的数据库,并且不需要更新/删除功能,因此当应用程序启动时,我想检查数据库是否存在,如果不存在则执行我的dbAdapter类.我知道它是一个简单的if语句,但我只是想知道查询db是否存在的最有效方法.

干杯

rds*_*rds 163

我宁愿直接检查文件的存在:

private static boolean doesDatabaseExist(Context context, String dbName) {
    File dbFile = context.getDatabasePath(dbName);
    return dbFile.exists();
}
Run Code Online (Sandbox Code Playgroud)

  • 干净简洁!爱它.谢谢. (5认同)

Mat*_*adt 79

/**
 * Check if the database exist and can be read.
 * 
 * @return true if it exists and can be read, false if it doesn't
 */
private boolean checkDataBase() {
    SQLiteDatabase checkDB = null;
    try {
        checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null,
                SQLiteDatabase.OPEN_READONLY);
        checkDB.close();
    } catch (SQLiteException e) {
        // database doesn't exist yet.
    }
    return checkDB != null;
}
Run Code Online (Sandbox Code Playgroud)

其中DB_FULL_PATH是数据库文件的路径.

我不只是检查文件是否存在的原因是因为它不会告诉(a)它是否是一个sqlite db文件,(b)文件没有损坏并且实际上可以被读取,即由于部分下载或者它已经被创造了.

  • 我尝试使用它来查看是否必须从捆绑包中复制"starter"数据库,或者只是继续加载那里的内容.所以我尝试使用它.但对我来说,即使没有数据库存在,这也一直都是真的. (4认同)
  • -1使用try/catch执行正常的非异常操作 (3认同)
  • 仅检查数据库文件是否存在并不能涵盖所有内容。那么你想让用户遇到异常,比如 SQLiteException?无论如何,您迟早都需要捕获它,除非您想在应用程序中导致 ANR。上述方法检查数据库是否可用并准备好工作,而不仅仅是检查其存在。除了处理异常之外,如何处理数据库存在但由于某种原因无法读取/解析的情况? (3认同)
  • 问题是检查数据库是否存在.如果可以打开和访问它.根据描述,数据库来自assets文件夹.这将在启动时运行,并在第一次运行时检查数据库是否存在.正如你所说,这个问题可能是其他问题的结果,而不仅仅是数据库不存在.但是,使用它会使应用程序对出错的问题视而不见.这是糟糕的编程技术. (3认同)
  • 使用try/catch只是为了查看某些东西是否为空......为什么不``checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH,null,SQLiteDatabase.OPEN_READONLY); if(checkDB == null){//数据库尚不存在.}`.我想这不是你的错,似乎java受到这种废话的困扰...... (2认同)