Base de datos externa de Android en la carpeta de activos
Tengo una aplicación de Android que se supone que leer y ampliar una base de datos que ya está creado en sqlite … funciona bien en emulador mediante la inserción de la base de datos en la carpeta "data / data / (packagename) / base de datos" en el explorador de archivos de emulador . Ahora el problema está ocurriendo con el dispositivo real. Obviamente no tiene la base de datos para abrir. Intenté poner la base de datos en carpeta de activos pero no estoy consiguiendo abrirla con el openhelper.
- Intel XDK: Conexión de la aplicación móvil a una base de datos
- La base de datos no se eliminará cuando desinstale la aplicación de Android
- Cómo deshabilitar el botón Borrar datos en Información de aplicación de la aplicación Administrar
- Cómo restringir la base de datos sqlite abierta en el proyecto de la biblioteca de Android mientras crea el archivo jar
- Sqlite Comprobar si la tabla está vacía
- ¿Podemos actualizar el APK en Google Play Store sin cambiar la versión de APP
- Java - java.lang.IllegalStateException: No se pudo leer la fila 0, col -1 de CursorWindow
- SQLite Random () En ORDER BY no se está clasificando correctamente
- ¿Cuándo es recomendable abrir y cerrar una base de datos?
- Recibo frecuentemente SQLiteDoneException al consultar un valor, ¿por qué?
- GetWritableDatabase () VS getReadableDatabase ()
- Random () en sqlite y Android sdk
- Android sqlite rollback
Debe copiar el archivo .db de su carpeta de activos a un almacenamiento interno / externo. Puede utilizar los siguientes códigos,
private static String DB_PATH = "/data/data/your package/database/"; private static String DB_NAME ="final.db";// Database name
Para crear una base de datos,
public void createDataBase() throws IOException { //If database not exists copy it from the assets boolean mDataBaseExist = checkDataBase(); if(!mDataBaseExist) { try { //Copy the database from assests copyDataBase(); Log.e(TAG, "createDatabase database created"); } catch (IOException mIOException) { throw new Error("ErrorCopyingDataBase"); } } }
Compruebe que la base de datos existe aquí: / data / data / your package / database / DB Name
private boolean checkDataBase() { File dbFile = new File(DB_PATH + DB_NAME); return dbFile.exists(); }
Copiar la base de datos de los activos
private void copyDataBase() throws IOException { InputStream mInput = getApplicationContext().getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream mOutput = new FileOutputStream(outFileName); byte[] mBuffer = new byte[1024]; int mLength; while ((mLength = mInput.read(mBuffer))>0) { mOutput.write(mBuffer, 0, mLength); } mOutput.flush(); mOutput.close(); mInput.close(); }
Espero que te ayude
Usted no puede acceder a la base de datos desde la carpeta de activos directamente que necesita para copiarlo primero a la ruta de datos / datos / (packagename) / base de datos a continuación, utilizarlo:
private String DB_PATH = "/data/data/" + "yourpackaename" + "/databases/" + "db.db";
En su onCreate ()
is = getAssets().open("db.db"); write(is);
Entonces el método para llamar:
public void write(InputStream is) { try { OutputStream out = new FileOutputStream(new File(DB_PATH)); int read = 0; byte[] bytes = new byte[1024]; while ((read = is.read(bytes)) != -1) { out.write(bytes, 0, read); } is.close(); out.flush(); out.close(); System.err.println(out + "\n"); } catch (IOException e) { e.printStackTrace(); } }
No se puede abrir directamente archivos desde la carpeta de activos . En su lugar, debe copiar el contenido de su carpeta de activos en un almacenamiento interno / externo y utilizar posteriormente la ruta de acceso de File
para abrir el archivo. En los emuladores, es más fácil para usted acceder a la carpeta de datos de sus aplicaciones. Sin embargo, en un dispositivo no andrajoso real, no es posible por razones de seguridad.
Usted necesita primero copiar el archivo de la base de datos de assests a la localización de los datos de la aplicación usando el código de Java. Puede usted fijar un cierto código para demostrar ¿Cómo usted está abriendo o que maneja la base de datos?
¿Tiene una base de datos pre-poblada y busca integrarla en su aplicación? En caso afirmativo, puede hacerlo con mi biblioteca
En el primer inicio de la aplicación después de la instalación
SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.COPY_TO_SYSTEM);
En lanzamientos posteriores
SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.READ_FROM_DEVICE);
Simplemente dispara consultas SQL
database.sqlInject("INSERT INTO food VALUES('Banana','Vitamin A');");
Obtenga resultados en Array en CSV, JSON, XML
ArrayList<String> rows=new ArrayList<String>(); rows=database.sqlEjectCSV("SELECT * FROM food;"); for (int i=0;i<rows.size();i++) { //Do stuffs with each row }
Necesitas incluir mi biblioteca para esto. Documentaciones aquí:
https://github.com/sangeethnandakumar/TestTube
- No se puede instalar el complemento TFS en el estudio Android
- Cómo configurar OnClickListener para ScrollView?