title: Failed to change locale for db '/data/data/my.easymedi.controller/databases/EasyMediInfo.db' to 'en_US'
body: <p>In my Android application there is a pre-defined database which is in the assets folder.</p>
  
  <p>I've created a table <code>android_metadata</code> with a column called <code>locale</code> and with one record <code>en_US</code>.</p>
  
  <p>In my application user should enter his/her details and click save button.</p>
  
  <p>When click the save button I got following error;</p>
  
  <blockquote>
    <p>10-21 09:37:06.010: E/SQLiteLog(6278): (11) database corruption at line 50741 of       [00bb9c9ce4]
    10-21 09:37:06.010: E/SQLiteLog(6278): (11) database corruption at line 50780 of [00bb9c9ce4]
    10-21 09:37:06.010: E/SQLiteLog(6278): (11) statement aborts at 16: [SELECT locale FROM android_metadata UNION SELECT NULL ORDER BY locale DESC LIMIT 1] 
    10-21 09:37:06.160: E/SQLiteDatabase(6278): Failed to open database '/data/data/my.easymedi.controller/databases/EasyMediInfo.db'.
    10-21 09:37:06.160: E/SQLiteDatabase(6278): android.database.sqlite.SQLiteException:   Failed to change locale for db '/data/data/my.easymedi.controller/databases /EasyMediInfo.db' to 'en_US'.
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at my.easymedi.db.DBHelper.openDataBase(DBHelper.java:153)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at my.easymedi.controller.AddNewPerson.onClick(AddNewPerson.java:202)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.view.View.performClick(View.java:4202)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.view.View$PerformClick.run(View.java:17340)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.os.Handler.handleCallback(Handler.java:725)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.os.Handler.dispatchMessage(Handler.java:92)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.os.Looper.loop(Looper.java:137)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.app.ActivityThread.main(ActivityThread.java:5039)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at java.lang.reflect.Method.invokeNative(Native Method)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at java.lang.reflect.Method.invoke(Method.java:511)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at dalvik.system.NativeStart.main(Native Method)
    10-21 09:37:06.160: E/SQLiteDatabase(6278): Caused by: android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed (code 11)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.nativeExecuteForString(Native Method)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:634)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:367)
    10-21 09:37:06.160: E/SQLiteDatabase(6278):     ... 22 more</p>
  </blockquote>
  
  <p>My DBHelper class is following;</p>
  
  <pre class="lang-java prettyprint-override"><code>package my.easymedi.db;
  
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import my.easymedi.entity.Person;
  import android.content.ContentValues;
  import android.content.Context;
  import android.database.sqlite.SQLiteDatabase;
  import android.database.sqlite.SQLiteException;
  import android.database.sqlite.SQLiteOpenHelper;
  import android.util.Log;
  import android.widget.Toast;
  
  public class DBHelper extends SQLiteOpenHelper {
  
   private static final String pkg = "my.easymedi.controller";
   private static String DB_PATH = "";
   private static String DB_NAME = "EasyMediInfo.db";
   private static final int DB_VERSION = 1;
   private final Context myContext;
   private SQLiteDatabase myDatabase;
  
   public DBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    // this.myContext = context;
    if (android.os.Build.VERSION.SDK_INT &gt;= 4.2) {
     DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
    } else {
     DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    }
    this.myContext = context;
   }
  
   public void createDataBase() {
    boolean dbExist = checkDataBase();
    System.out.println("===" + dbExist + "===");
    if (dbExist) {
     // do nothing - database already exist
    } else {
  
     this.getReadableDatabase();
     this.close();
     try {
      copyDataBase();
      Log.d("CREATE_DB", "createDatabase database created");
     } catch (IOException e) {
      Toast.makeText(myContext, e.getMessage(), Toast.LENGTH_SHORT)
       .show();
      Log.d("CREATE_DB", e.getMessage());
     }
    }
   }
  
   private void copyDataBase() throws IOException {
    System.out.println("***copy db***");
    InputStream databaseInput = null;
    /* Path to copy the database */
    String outFileName = DB_PATH + DB_NAME;
    /* open the empty database as an output stream */
    OutputStream databaseOutput = new FileOutputStream(outFileName);
    /* open the local database as the input stream */
    databaseInput = myContext.getAssets().open(DB_NAME);
  
    /* Transfer byte from byte from input file to output file */
    byte[] buffer = new byte[1024];
    int length = databaseInput.read(buffer);
    while (length &gt; 0) {
     databaseOutput.write(buffer, 0, length);
     //databaseOutput.flush();
    }
    databaseOutput.flush();
    databaseInput.close();
    databaseOutput.close();
   }
  
   private boolean checkDataBase() {
    File dbFile = new File(DB_PATH + DB_NAME);
    return dbFile.exists();
    /*SQLiteDatabase checkDB = null;
    try {
      String myPath = DB_PATH + DB_NAME;
      checkDB = SQLiteDatabase.openDatabase(myPath, null,
              SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    } catch (SQLiteException e) {
      Toast.makeText(myContext, e.getMessage(), Toast.LENGTH_SHORT)
              .show();
      Log.d("Check_DB", e.getMessage());
    }
    if (checkDB != null) {
      String str = "checked";
      System.out.println("====" + str + "====");
      checkDB.close();
    }
    return checkDB != null ? true : false;*/
   }
  
   /* Open the database */
   public boolean openDataBase() {
    String myPath = DB_PATH + DB_NAME;
    Toast.makeText(myContext, myPath, Toast.LENGTH_SHORT).show();
    myDatabase = SQLiteDatabase.openDatabase(myPath, null,
     SQLiteDatabase.OPEN_READWRITE);
    if (myDatabase != null) {
     System.out.println("====database opened====");
    } else {
     System.out.println("====error opening database====");
    }
    return myDatabase != null ? true : false;
   }
  
   public void closeDatabase() {
    if (myDatabase != null) {
     myDatabase.close();
    }
   }
  
   @Override
   public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
  
   }
  
   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
  
   }
  
   public boolean insertIntoDatabase(String table, ContentValues values) {
    try {
     myDatabase.insert(table, null, values);
     Log.d("INSERT", "Information Saved");
     return true;
    } catch (Exception e) {
     // TODO Auto-generated catch block
     Log.d("INSERT", e.toString());
     return false;
    }
   }
  }
  </code></pre>
  
  <p>And this is my code segment for save button;</p>
  
  <pre class="lang-java prettyprint-override"><code>case R.id.btnSave: personName = etName.getText().toString();
  date_of_birth = tvDOB.getText().toString();
  age = tvAge.getText().toString();
  
  int selected_rb_ID = genderGrp.getCheckedRadioButtonId();
  RadioButton rb = (RadioButton) findViewById(selected_rb_ID);
  gender = rb.getText().toString();
  bloodGrp = spiBloodGrp.getSelectedItem().toString();
  
  Person person = new Person();
  person.setName(personName);
  person.setDate_of_birth(date_of_birth);
  person.setAge(age);
  person.setGender(gender);
  person.setBloodGrp(bloodGrp);
  
  ContentValues values = new ContentValues();
  values.put(COLUMN_PERSON_NAME, person.getName());
  values.put(COLUMN_DOB, person.getDate_of_birth());
  values.put(COLUMN_AGE, person.getAge());
  values.put(COLUMN_GENDER, person.getGender());
  values.put(COLUMN_BLOODGRP, person.getBloodGrp());
  
  DBHelper dbHelper = new DBHelper(this);
  dbHelper.createDataBase();
  dbHelper.openDataBase();
  if (dbHelper.insertIntoDatabase("EMPerson", values)) {
   Toast.makeText(
    getApplicationContext(),
    "Data has been saved successfully",
    Toast.LENGTH_SHORT
   ).show();
  } else {
   Toast.makeText(
    getApplicationContext(),
    "Oops ! Try again",
    Toast.LENGTH_SHORT
   ).show();
  }
  dbHelper.closeDatabase();
  
  break;
  </code></pre>
  
  <p>In my main activity I've created the database by calling this code segment.</p>
  
  <pre class="lang-java prettyprint-override"><code>final DBHelper helper = new DBHelper(this);
  helper.createDataBase();
  </code></pre>
  
  <p>What is the meaning of this error and how can I fix it?</p>