11

我在我的一个 Android 项目中使用 Sqlite 数据库。除了一加二设备外,它在所有设备上都能正常工作。

尝试打开数据库时出现异常。这是崩溃日志。

 12-23 19:14:35.235: E/SQLiteLog(3133): (11) database corruption at line 53216 of [9491ba7d73]
12-23 19:14:35.235: E/SQLiteLog(3133): (11) statement aborts at 7: [SELECT locale FROM android_metadata UNION SELECT NULL ORDER BY locale DESC LIMIT 1] 
12-23 19:14:35.237: E/SQLiteDatabase(3133): Failed to open database '/data/data/com.mycompany.myapp/databases/alcochange.sqlite'.
12-23 19:14:35.237: E/SQLiteDatabase(3133): android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.mycompany.myapp/databases/myapp.sqlite' to 'en_US'.

点击此处查看完整的崩溃日志

我在这里看到过其他类似的问题,我几乎尝试了所有答案,但没有任何效果。我试过这个这个

编辑:该设备在氧气棒棒糖上运行。

4

2 回答 2

2

我找不到出现此错误的原因,但不知何故我通过执行以下操作避免了这种情况。

以前,我在包中有一个 .sqlite 数据库,当用户第一次打开我们的应用程序时,我将 .sqlite 数据库从包中复制到正确的路径。

但是现在,我已经从 .sqlite 中导出了原始查询,并将其作为 txt 文件与捆绑包一起添加。现在,当用户第一次打开应用程序时,我将首先在路径中创建一个空的 .sqlite 文件,然后我从包中的 txt 文件中读取所有 .sql 查询,并在 .sqlite 文件中执行它们小路。

于 2016-02-04T20:40:19.023 回答
1

尝试手动更改语言环境。

使用 SQLite 编辑器(例如SQLiteStudio )打开数据库文件,然后打开android_metadata表。如果它不存在,则创建它。(您可以使用查询编辑器(工具>打开查询编辑器)创建它并复制/粘贴下面的 DDL 代码)

CREATE TABLE android_metadata ( 
    locale TEXT 
);

要插入记录,您可以在查询编辑器中复制/粘贴这一行:

INSERT INTO android_metadata VALUES ('en_us');

提示:要在 SQLiteStudio 中运行查询,您应该按下工具栏中带有闪电图标的按钮。

于 2016-01-04T06:14:06.880 回答