title: copying sqlite db to android device fails
body: <p>I have an sqlite db which I copied to the 'asset' folder. In my prog I check if the database already exists, if not I create a new one and copy it. 
  I used (more or less) the code from <a href="http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/comment-page-2/" rel="nofollow">http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/comment-page-2/</a></p>
  
  <pre><code>    public void createDataBase() throws IOException {
      boolean dbExist = checkDataBase();
  
      if (dbExist) {
          Log.i(DEBUG_TAG, "createDataBase -&gt; Datenbank existiert");
          // 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();
          Log.i(DEBUG_TAG, "else, db existiert nicht 1");
          try {
              copyDataBase();
              Log.i(DEBUG_TAG, "nach copydatabase");
          } catch (IOException e) {
              throw new Error("Error copying database");
          }
      }
  }
  
  /**
   * Checked ob Database bereits existiert
   * 
   * @return
   */
  private boolean checkDataBase() throws SQLiteException {
      SQLiteDatabase checkDB = null;
      Boolean checkTable = false;
      try {
          String myPath = DB_PATH + DB_NAME;
          checkDB = SQLiteDatabase.openDatabase(myPath, null,
                  SQLiteDatabase.OPEN_READWRITE);
          Log.i(DEBUG_TAG, "checkdatabase1");
  
      } catch (SQLiteException e) {
          Log.e(DEBUG_TAG, "Fehler checkDataBase: ", e);
      }
      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 = dbContext.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();
      Log.i(DEBUG_TAG, "copydatabase");
  }
  </code></pre>
  
  <p>In the Emulator it works perfectly fine. </p>
  
  <p>I tried then to run it on my device (HTC Desire HD). There I get the following message:</p>
  
  <pre><code>03-26 17:02:05.053: INFO/Database(24458): sqlite returned: error code = 14, msg = cannot open file at line 27206 of [42537b6056]
  </code></pre>
  
  <p>This happens, when I try the first time to open the DB. When I run the Program in the emulator, I dont get this message. When I run the programm the 2nd time, it finds the database, no errors with opening, but the tables do not exist.</p>
  
  <p>I've debugged the program on the emulator and the device several times, but could not find any solution.</p>
  
  <p>Could this be some kind of permission problem? (Since I'm also not able to see the db on the device with adb --> permission denied')</p>
  
  <p>I'm very new to android, so maybe I just missed something stupid....</p>
  
  <p>Thanks</p>