Home » Android » sqlite – Android One Plus Two: Failed to change locale for db

sqlite – Android One Plus Two: Failed to change locale for db

Posted by: admin May 14, 2020 Leave a comment


I am using Sqlite database in one of my Android project. It works fine in all the devices except One Plus Two device.

I am getting exception while trying to open the database. This is the crashlog.

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

Please click here to see the full crash log

I have seen other questions like that here, I have tried almost every answers, but nothing works.
I have tried this and this.

EDIT: The device runs on Oxygen Lollipop.

How to&Answers:

I can’t find the reason why I am having this error, but somehow I have avoided this by doing the following.

Previously, I had a .sqlite database in the bundle and when the user open our app for the first time, I copied the .sqlite database from the bundle to the correct path.

But now, I have exported the raw queries from the .sqlite and added it with the bundle as a txt file. Now when the user opens the app for the first time, I will first create an empty .sqlite file in the path and then I read all the .sql queries from the txt file from the bundle and execute them over the .sqlite file in the path.


Try to change locale manually.

Open your database file with a SQLite editor such as SQLiteStudio, then open android_metadata table. if it does not exist, create it. (you may create it with the query editor (tools>open query editor) and copy/paste the DDL code below)

CREATE TABLE android_metadata ( 
    locale TEXT 

for inserting the record you may copy/paste this line in the query editor:

INSERT INTO android_metadata VALUES ('en_us');

Hint: to run the query in SQLiteStudio you should push the button with lightning icon in the toolbar.