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"

  • Consulta de ORMLite para la fecha
  • Android: SQL rawQuery con comodín (%)
  • ¿Es posible usar Couch DB o MySql o cualquier otro DB en Android?
  • Rendimiento de Android ContentProvider
  • Copia dos bases de datos SQLite en la carpeta de activos de Android
  • ¿Es posible aplicar la clave principal en los campos de texto en la base de datos android
  • Razones para utilizar la base de datos SQLite legible
  • Android: Bulk Insert, cuando InsertHelper está obsoleto
  • Cómo imprimir la consulta ejecutada por el método query () de android
  • Cómo almacenar la imagen en la base de datos SQLite
  • Populating Spinner de la base de datos SQLite Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.