我在我的一个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查看完整的崩溃日志
我在这里看过其他类似的问题,我几乎尝试了所有答案,但没有任何效果。 我尝试了this和this。
编辑:该设备在Oxygen Lollipop上运行。
答案 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中运行查询,您应该按下工具栏中带有图标的按钮。