gpt4 book ai didi

android - 拦截数据库错误 "file is encrypted or is not a database"

转载 作者:搜寻专家 更新时间:2023-10-30 23:14:56 31 4
gpt4 key购买 nike

因为我正在尝试实现导入/导出数据,所以我想测试如果导入的文件不是 sqlite 数据库会发生什么来管理错误。

在 logcat 中我有以下内容:

03-22 15:02:39.957: E/SQLiteLog(20407): (26) file is encrypted or is not a database
03-22 15:02:39.978: E/DefaultDatabaseErrorHandler(20407): Corruption reported by sqlite on database: /data/data/com.crbin1.ltd/databases/dbltd
03-22 15:02:40.017: E/DefaultDatabaseErrorHandler(20407): deleting the database file: /data/data/com.crbin1.ltd/databases/dbltd

应用程序只需为用户创建一个新的空数据库,不会出错。

在数据库导入之后我调用了下面的代码(DatabaseLTD 是我的 SQliteOpenHelper 类)

private void checkImportedDb() {
try {
DatabaseLTD dbltd = new DatabaseLTD(mCtx);
SQLiteDatabase db = dbltd.getReadableDatabase();
} catch (SQLiteException e) {
e.printStackTrace();
}
}

但我无法拦截“文件已加密或不是数据库”错误。我怎样才能捕捉到错误来管理它?

最佳答案

SQLiteOpenHelper 构造函数:

public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)

需要一个错误处理程序参数“DatabaseErrorHandler”。

to be used when sqlite reports database corruption, or null to use the default error handler.

这可能是您正在寻找的。

编辑:正如 crbin1 正确指出的那样,构造函数仅是 API >= 11。

对于 API < 11,我(未经测试)的建议是打开数据库并获取表列表:

Retrieve a list of all tables in the database

如果您应该加载的数据库必须至少有一个,您可以检查该数字,或者更好的是,确保一个特定的表已经存在。

如果您也希望能够检查空数据库,作为最后的努力,您可以尝试 SQLiteDatabase 方法:

public static SQLiteDatabase openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags) 

我没有检查,但我强烈怀疑此方法的文档不正确,因为有关“flag”参数的信息不一致,特别是行:

Open the database according to the flags OPEN_READWRITE OPEN_READONLY CREATE_IF_NECESSARY and/or NO_LOCALIZED_COLLATORS.

与“int flags”参数的存在冲突:

flags to control database access mode

我知道我是个懒鬼,我应该自己检查一下,但是如果是这样的话,您可以尝试使用 openDatabase 预先验证数据库,使用 OPEN_READONLY 并且没有 CREATE_IF_NECESSARY,捕获异常(如果有) ,然后继续使用“标准”SQLiteOpenHelper 方法。

关于android - 拦截数据库错误 "file is encrypted or is not a database",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15573771/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com