title: Database not copying from assets
body: <p>Little to say ill just paste my code hoping that someone will see what im missing:</p>
  
  <p><strong>Database.Java</strong></p>
  
  <pre><code>package gr.peos;
  
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  
  import android.content.Context;
  import android.database.SQLException;
  import android.database.sqlite.SQLiteDatabase;
  import android.database.sqlite.SQLiteException;
  import android.database.sqlite.SQLiteOpenHelper;
  
  public class Database extends SQLiteOpenHelper{
  
  //The Android's default system path of your application database.
  private static String DB_PATH = "/data/data/gr.peos/databases/";
  
  //Name of the Database to be created.
  private static String DB_NAME = "BLib";
  
  private SQLiteDatabase myDataBase; 
  
  private final Context myContext;
  
   /**
   * Constructor
   * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
   * @param context
   */
  
  public Database(Context context) {
  
      super(context, DB_NAME, null, 1);
      this.myContext = context;
  }   
  
  /**
   * Creates a empty database on the system and rewrites it with your own database.
   * */
  
  public void createDataBase() throws IOException{
  
      //First we check if the database already exists, Method declared later
      boolean dbExist = checkDataBase(); 
  
      if(dbExist){
          //do nothing - database already exists
      }else{
  
          //By calling this method an empty database will be created into the default system path
             //of your application so we are going to be able to overwrite that database with our database.
          this.getReadableDatabase();
  
          try {
              copyDataBase(); //Method declared later
  
          } 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 transferring byte stream.
   * */
  
  private void copyDataBase() throws IOException{
  
      //Open your local db as the input stream
      InputStream myInput = myContext.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();
  
  }
  
  
  
  
  //Opening the Database
  public void openDataBase() throws SQLException{
  
      //Open the database
      String myPath = DB_PATH + DB_NAME;
      myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
  
  }
  
  
  /
  //Finally overriding a few methods as required
  
  @Override
  public synchronized void close() {
  
          if(myDataBase != null)
              myDataBase.close();
  
          super.close();
  
  }
  
  @Override
  public void onCreate(SQLiteDatabase db) {
  
  }
  
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  
  }
  </code></pre>
  
  <p>}</p>
  
  <p>The part to call this is on the onCreate method of my main activity (Tried others too it wasnt the problem).</p>
  
  <pre><code> Database myDbHelper = new Database(null);
      myDbHelper = new Database(this);
  
      try {
          myDbHelper.createDataBase();
  
      } catch (IOException ioe) {
  
          throw new Error("Unable to create database");
          }
  
  try {
  
  
  
  }catch(SQLException sqle){
  
      throw sqle;
  
    }
  </code></pre>
  
  <p>The weird part now. On my device (I dont have root access so cant extract the db after it's been created), my Data appears to be 48KB. When running the exact same code on the emulator the database isnt copied over (Im not picking on any exception). To be exact the android/metadata table seems to be getting copied but the other tables along with the data arent. Any ideas?</p>