title: SQLiteOpenHelper: onCreate() method not called on physical device
body: <p>I have done many tests on an android emulator running in version 4.4.
  On my app I create a sqlite database with one table using SQLiteOpenHelper:</p>
  
  <pre><code>package com.findwords.modeles;
  
  import android.content.Context;
  import android.database.sqlite.SQLiteDatabase;
  import android.database.sqlite.SQLiteException;
  import android.database.sqlite.SQLiteOpenHelper;
  
  import com.findwords.MainActivity;
  import com.findwords.controleurs.MenuController;
  
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  
  /**
   * Created by louk on 02/01/14.
   */
  public class DictionaryDbHelper extends SQLiteOpenHelper{
  
      // declare constants fields
      private static final String DB_PATH = "/data/data/com.findwords/databases/";
      private static final String DB_NAME = "dictionary_db";
      private static final int DB_VERSION = 1;
  
      // declared constant SQL Expression
      private static final String DB_CREATE =
              "CREATE TABLE dictionary ( " +
                      "_id integer PRIMARY KEY AUTOINCREMENT, " +
                      "word text NOT NULL, " +
                      "definition text NOT NULL, " +
                      "length integer NOT NULL " +
                      ");";
  
      private static final String DB_DESTROY =
              "DROP TABLE IF EXISTS dictionnary";
  
      /*
       * constructor
       */
      public DictionaryDbHelper(Context context) {
          super(context, DB_NAME, null, DB_VERSION);
      }
  
      /**
       * Creates a empty database on the system and rewrites it with your own database.
       * */
      public void createDataBase() throws IOException {
  
          boolean dbExist = checkDataBase();
  
          if(dbExist){
              //do nothing - database already exist
          }else{
  
              //By calling this method and empty database will be created into the default system path
              //of your application so we are gonna be able to overwrite that database with our database.
              this.getReadableDatabase();
  
              try {
  
                  copyDataBase();
  
              } catch (IOException e) {
  
                  throw new Error("Error copying database");
  
              }
          }
  
      }
      /**
       * Check if the database already exist to avoid re-copying the file each time you open the application.
       * @return true if it exists, false if it doesn't
       */
      private boolean checkDataBase(){
  
          SQLiteDatabase checkDB = null;
  
          try{
              String myPath = DB_PATH + DB_NAME;
              checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
  
          }catch(SQLiteException e){
  
              //database does't exist yet.
  
          }
  
          if(checkDB != null){
  
              checkDB.close();
  
          }
  
          return checkDB != null ? true : false;
      }
  
      /**
       * Copies your database from your local assets-folder to the just created empty database in the
       * system folder, from where it can be accessed and handled.
       * This is done by transfering bytestream.
       * */
      private void copyDataBase() throws IOException{
  
          //Open your local db as the input stream
          InputStream myInput = MenuController.getInstance().getMainActivity().getAssets().open(DB_NAME);
  
          // Path to the just created empty db
          String outFileName = DB_PATH + DB_NAME;
  
          //Open the empty db as the output stream
          OutputStream myOutput = new FileOutputStream(outFileName);
  
          //transfer bytes from the inputfile to the outputfile
          byte[] buffer = new byte[1024];
          int length;
          while ((length = myInput.read(buffer))&gt;0){
              myOutput.write(buffer, 0, length);
          }
  
          //Close the streams
          myOutput.flush();
          myOutput.close();
          myInput.close();
  
      }
  
      /*
       * (non-Javadoc)
       * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
       */
      @Override
      public void onCreate(SQLiteDatabase db) {
          db.execSQL(DB_CREATE);
  
          try {
              createDataBase();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  
      /*
       * (non-Javadoc)
       * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
       */
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
          db.execSQL(DB_DESTROY);
          onCreate(db);
      }
  }
  </code></pre>
  
  <p>Moreover I have written an adapter with a method open:</p>
  
  <pre><code>/*
   * open database connection
   */
  public DictionaryDbAdapter open() throws SQLException {
      mDbHelper = new DictionaryDbHelper(mContext);
      mDb = mDbHelper.getWritableDatabase();
      return this;
  }
  </code></pre>
  
  <p>It's working well on the emulator so the onCreate() method of the SQLiteOpenHelper class is called and create the database, but is not called on my phone (Google Nexus 5).</p>
  
  <p>My phone is not rooted so I can't access the folder /data/data/com.myapp/databases .</p>
  
  <p>However I want this application to work on any phone so I don't want to root my phone.</p>
  
  <p>Thanks in advance to anyone who could help me.</p>