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
- SQLite Random () En ORDER BY no se está clasificando correctamente
- ¿En Android puedo hacer una consulta SQL en un cursor?
- El mejor lugar para cerrar la conexión de la base de datos
- Operador '! =' No se puede aplicar a los operandos de tipo 'Tarea' e 'int'
- CursorIndexOutOfBoundsException Index 0 solicitado, con un tamaño de 0
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)); }
- Consulta SQL de Android con dos cláusulas "Where"
- Envío de SQLite db al servicio web
- ¿Cómo puedo insertar una base de datos SQLite en una aplicación?
- Prácticas recomendadas para exponer varias tablas mediante proveedores de contenido en Android
- La carpeta de "datos" del monitor de dispositivos Android está vacía
- Enviar una base de datos a través de ftp - Obtener un archivo diferente
- La base de datos Sqlite onUpgrade () no se llama
- Adaptador de cursor y ejemplo sqlite
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"
- TGLAugmentedRealityView like library PARA ANDROID? (Ubicaciones en la vista previa de la cámara)
- Guardar rutas de lienzo en SharedPreference y volver a dibujar en lienzo cuando se vuelva a abrir la aplicación