2014-09-09 4 views
-1

Как-то у меня возникла ошибка при копировании .db-файла в журнал (как вы видите, введённый код) Файл napoleon.db находится в папке с ресурсами, так как я предполагаю все должен работать, но он неОткрытие SQLite .db из активов

Почему он не находит его?

Я делаю это на примере, но это не работает. Любые мысли?

public class MySqLiteOpenHelper extends SQLiteOpenHelper{ 
    private static String DATABASE_NAME = "napoleon.db"; 
    public final static String DATABASE_PATH = "/data/data/com.example.task/databases/"; 
    private static final int DATABASE_VERSION = 1; 

    private SQLiteDatabase dataBase; 
    private final Context dbContext; 

    public MySqLiteOpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     this.dbContext = context; 
     // checking database and open it if exists 
     if (checkDataBase()) { 
      openDataBase(); 
     } else 
     { 
      try { 
       this.getReadableDatabase(); 
       copyDataBase(); 
       this.close(); 
       openDataBase(); 

      } catch (IOException e) { 
       throw new Error("Error copying database"); 
      } 
      Toast.makeText(context, "Initial database is created", Toast.LENGTH_LONG).show(); 
     } 
    } 

    private void copyDataBase() throws IOException{ 
     InputStream myInput = dbContext.getAssets().open(DATABASE_NAME); 
     String outFileName = DATABASE_PATH + DATABASE_NAME; 
     OutputStream myOutput = new FileOutputStream(outFileName); 

     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = myInput.read(buffer))>0){ 
      myOutput.write(buffer, 0, length); 
     } 

     myOutput.flush(); 
     myOutput.close(); 
     myInput.close(); 
    } 

    public void openDataBase() throws SQLException { 
     String dbPath = DATABASE_PATH + DATABASE_NAME; 
     dataBase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE); 
    } 

    private boolean checkDataBase() { 
     SQLiteDatabase checkDB = null; 
     boolean exist = false; 
     try { 
      String dbPath = DATABASE_PATH + DATABASE_NAME; 
      checkDB = SQLiteDatabase.openDatabase(dbPath, null, 
        SQLiteDatabase.OPEN_READONLY); 
     } catch (SQLiteException e) { 
      Log.v("MyLog", "database does't exist"); 
     } 

     if (checkDB != null) { 
      exist = true; 
      checkDB.close(); 
     } 
     return exist; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
     // TODO Auto-generated method stub 

    } 
} 
+1

Что ошибка в LogCat? –

+0

Ошибка копирования базы данных – user2976267

+0

выполните некоторые исследования сначала ... и используйте https://github.com/jgilfelt/android-sqlite-asset-helper – Selvin

ответ

0

Вы должны использовать эту БД Путь:

if(android.os.Build.VERSION.SDK_INT >= 17){ 
    DB_PATH = context.getApplicationInfo().dataDir + "/databases/";   
} 
else 
{ 
    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; 
} 

Для Jellybean 4,2 мульти пользователи меняются:

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

к:

DB_PATH = context.getApplicationInfo().dataDir + "/databases/";

+0

ну, проблема другая - вместо списка таблиц она возвращает только android_metadata. Я соглашусь с вами, потому что пути верны. – user2976267

+0

Кажется, что db не возвращает таблицы. Вместо этого указано, что имя таблицы - android_metadata. – user2976267

+0

ну, это странно, я просто удалил приложение и переустановил его, и проблема исчезла. Вся проблема, половина дня для исследования, вопрос с нисходящим запросом решен только при удалении приложения .. brilliant :( – user2976267

-1

Использование ниже поста узнать линию шага линии, чтобы скопировать дб от актива приложения памяти

http://iamvijayakumar.blogspot.in/2013/11/copy-sqlite-database-file-from-assets.html

+0

Вы имеете в виду, мой вопрос? или вы имели в виду ответ от этого человека? Потому что я не выдвинул – user2976267

+0

@ user2976267. что ребята удалили свой комментарий сейчас –

Смежные вопросы