Android One Plus Two:无法更改db

时间:2015-12-23 14:11:39

标签: android sqlite oneplustwo

我在我的一个Android项目中使用Sqlite数据库。它在除 One Plus Two 设备之外的所有设备中都能正常工作。

我在尝试打开数据库时遇到异常。这是崩溃日志。

 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'.

click here查看完整的崩溃日志

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

编辑:该设备在Oxygen Lollipop上运行。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

尝试手动更改区域设置。

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

CREATE TABLE android_metadata ( 
    locale TEXT 
);

用于插入记录,您可以在查询编辑器中复制/粘贴此行:

INSERT INTO android_metadata VALUES ('en_us');

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