2012-12-29 14 views
5

Mam plik .db w folderze assets. Skopiowałem go do folderu data/data/<packagename>/databases/ w emulatorze i działa poprawnie ..Baza danych nie jest kopiowana z folderu zasobów do urządzenia

Ale kiedy uruchomię go na urządzeniu, siła się zamyka. Jest pokazując

SQLite exception: no such table: tbl_user 

Oto mój kod ..

public class DatabaseHelper extends SQLiteOpenHelper { 

     public DatabaseHelper() { 

      super(dataContext, DATABASE_NAME, null, 1); 

      DB_PATH = "/data/data/" 
        + dataContext.getApplicationContext().getPackageName() 
        + "/databases/"; 

      Log.d("PATH", DB_PATH); 

      boolean dbExist = checkDataBase(); 
      if (!dbExist) { 

       this.getReadableDatabase(); 
       try { 
        copyDataBase(); 

       } catch (IOException e) { 
        Log.d("Error", e.toString()); 
       } 
      } 

     } 

     private void copyDataBase() throws IOException { 
      // TODO Auto-generated method stub 

      InputStream inFile = dataContext.getAssets().open(DATABASE_NAME); 
      String outFileName = DB_PATH + DATABASE_NAME; 
      OutputStream myOutput = new FileOutputStream(outFileName); 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = inFile.read(buffer)) > 0) { 
       myOutput.write(buffer, 0, length); 
      } 
      // Close the streams 
      myOutput.flush(); 
      myOutput.close(); 
      inFile.close(); 
     } 

     private boolean checkDataBase() { 
      // TODO Auto-generated method stub 

      File dbFile = new File(DB_PATH + DATABASE_NAME); 

      return dbFile.exists(); 

     } 

Powinienem zrobić coś innego, aby skopiować że db do urządzenia ???

Dzięki ..

+2

Naprawdę polecam użycie 'SQLiteAssetHelper', ponieważ ma on cały debugowany proces, zamiast toczyć własne: https://github.com/jgilfelt/android-sqlite-asset-helper – CommonsWare

+0

proszę sprawdzić ten link http://www.reigndesign.com/blog/using-your-own-sqlite-database- aplikacje na Androida / –

Odpowiedz

5

dostałem odpowiedź ... :)

Od tutaj ..

http://www.anddev.org/networking-database-problems-f29/missing-table-in-sqlite-with-specific-version-of-desire-hd-t50364.html

to był problem z wersją 2.3.6 było ... praca z innymi urządzeniami ... po prostu dodano trzy linie, aby rozwiązać problem ...

boolean dbExist = checkDataBase(); 
     SQLiteDatabase db_Read = null; 
     if (!dbExist) 
     { 
      db_Read = this.getReadableDatabase(); 
      db_Read.close(); 

      try 
      { 
       copyDataBase(); 
      } 
      catch (IOException e) 
      { 
       Log.d("Error", e.toString()); 
      } 
     } 
0

Po prostu zmień plik bazy danych .db w folderze zasobów na .png lub dowolny inny skompresowany format, który będzie działał w urządzeniach 2.1, 2.2 i wyższych.

Powiązane problemy