Cómo utilizar la base de datos SQLite precargada en Android de Activos

Quiero utilizar la preloaded database de preloaded database en mi aplicación significa tratar de obtener base de datos en el momento de la apk está instalado para que pueda utilizar los datos ya guardados en ese. Copio el archivo "ingredients.db" en la carpeta de activos. Y utilice el código siguiente, pero esto obtiene el error "Copia de la base de datos problema desde el archivo de recursos"

¿Como puedó resolver esté problema? Por favor sugiera las formas posibles

Mi clase de ayudante de base de datos es así

 class IngredientHelper extends SQLiteOpenHelper { private static final String DATABASE_PATH = "/data/data/com.example.preloadeddatabase/databases/"; private static final String DATABASE_NAME = "ingredients.db"; private static final String TABLE_NAME = "Ingredients"; private static final String COLUMN_ID = "_id"; private static final String COLUMN_TITLE = "ingredient_name"; private static final int SCHEMA_VERSION = 1; public SQLiteDatabase dbSqlite; private final Context myContext; public IngredientHelper(Context context) { super(context, DATABASE_NAME, null, SCHEMA_VERSION); this.myContext = context; } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public void createDatabase() { createDB(); } public void createDB() { boolean dbExist = DbExists(); if (!dbExist) { this.getReadableDatabase(); copyDataBase(); } } private boolean DbExists() { SQLiteDatabase db = null; try { String databasePath = DATABASE_PATH + DATABASE_NAME; db = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE); db.setLocale(Locale.getDefault()); db.setLockingEnabled(true); db.setVersion(1); } catch (SQLiteException e) { Log.e("SqlHelper", "Database Not Found"); } if (db != null) { db.close(); } return db != null ? true : false; } private void copyDataBase() { InputStream iStream = null; OutputStream oStream = null; String outFilePath = DATABASE_PATH + DATABASE_NAME; try { iStream = myContext.getAssets().open(DATABASE_NAME); oStream = new FileOutputStream(outFilePath); byte[] buffer = new byte[2048]; int length; while ((length = iStream.read(buffer)) > 0) { oStream.write(buffer, 0, length); } oStream.flush(); oStream.close(); iStream.close(); } catch (IOException e) { throw new Error("Problem Copying Database From Resource File"); } } public void openDatabase() throws SQLException { String myPath = DATABASE_PATH + DATABASE_NAME; dbSqlite = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); } @Override public synchronized void close() { if (dbSqlite != null) { dbSqlite.close(); } super.close(); } public Cursor getCursor() { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables(TABLE_NAME); String[] asColumnsToReturn = new String[] { COLUMN_ID, COLUMN_TITLE }; Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, null, null, null, "ingredient_name ASC"); return mCursor; } public String getName(Cursor c) { return (c.getString(1)); } 

No abra la base de datos legible hasta después de copiar el archivo de recursos en el directorio de la base de datos. Es probable que esté recibiendo la excepción ya que está intentando escribir en un archivo que ya tiene abierto (ya que se abre cuando llama a getReadableDatabase ()).

Aquí hay una solución simple a su problema, pero en este método hay un error. Cuando se utiliza un método this.getReadableDatabase () ;, entonces la base de datos está abierta, es decir, debe estar cerca de this.close (); Este error es especialmente importante para los dispositivos HTC Desire

Utilice esta solución , resuelve el problema de apertura DB.

El archivo de base de datos debe tener la extensión ".sqlite" en lugar de ".db"

  • Android: falló a setLocale () al construir, cerrando la base de datos
  • Cómo guardar la ruta de recursos en SQLite
  • Manejo del almacenamiento de disco completo en Android
  • Base de datos SQLite para aplicaciones de Android con múltiples usuarios potenciales
  • Android: ¿Qué tan segura es la base de datos con la aplicación
  • ¿Cómo establecer el tipo de datos en SQLiteDatabase vinculación de consulta en bruto?
  • La base de datos no se copia correctamente en OnePlus Two
  • Prácticas recomendadas para unir tablas y notificar a ContentObservers en Android ContentProvider
  • Error: Asegúrese de que el cursor se inicializa correctamente antes de acceder a los datos de él?
  • Actualización de Android 6.0 que causa DB sqlite falla durante init
  • Búsqueda de Android con Fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.