¿Cómo acceder a Android a una base de datos sqlite incluida en la carpeta de activos?

Ya tengo una base de datos SQLite. Lo puse en la carpeta de assets de mi proyecto. He leído la documentación de Android. Dijo que para todas las bases de datos en Android, la ruta de acceso es data/data/pack_name/database_name .

Esto me confundió. Acabo de colocarlo en la carpeta de assets , por lo que la ruta de acceso es data/data/assets/database_name ?

5 Solutions collect form web for “¿Cómo acceder a Android a una base de datos sqlite incluida en la carpeta de activos?”

El nombre del paquete no es el nombre del proyecto, el nombre del paquete es el espacio de nombres. Desde el enlace de Anthony.

Recuerde cambiar el "YOUR_PACKAGE" al espacio de nombres del paquete de aplicación (ie: com.examplename.myapp) en la cadena DB_PATH.

Por ejemplo, desde el tutorial Hello World , el nombre del proyecto es HelloAndroid pero el nombre del paquete es com.example.helloandroid

Si esta aplicación tuviera una base de datos, sería almacenada en data/data/com.example.helloandroid/database

Para ver cómo es para las otras aplicaciones, puede iniciar su emulador. En la barra de menú que tiene el nombre de su avd (creo que significa Android Virtual Device). En la mía es "avdessay: 5554"

(En Linux) En la línea de comandos, escriba:

adb -s emulator-5554 shell

Tienes que reemplazar 5554 por cualquier puerto que estés usando.

Si tiene el símbolo del sistema '#' puede escribir:

cd data/data

Allí, verá que todo está en forma de un nombre de paquete.

Más información aquí

Cuando crea una base de datos utilizando las clases SQLiteDatabase o SQLiteOpenHelper , crea la base de datos en su data/data/package_name/database .

Puede acceder a ese recurso utilizando

 InputStream myInput = myContext.getAssets().open(your_database_here); 

Cualquier otra información, consulte Uso de su propia base de datos SQLite en las aplicaciones de Android

La parte package_name de la ruta, sería el nombre de su paquete . Puede encontrar el nombre del paquete en la primera línea de sus archivos .java .

Como ejemplo, mi clase comienza con esto en la parte superior

 package com.forloney.tracker; 

Así que mi base de datos está en data/data/com.forloney.tracker/database carpeta de data/data/com.forloney.tracker/database .

Espero que esto tenga sentido.

@ScCrow Yo también seguí este ejemplo y tuve los mismos problemas que hiciste hasta que me di cuenta de que no estaba usando el DataBaseHelper correctamente (o mejor dicho, tenía un capricho que pasé por alto).

Cuando utiliza su clase DatabaseHelper en su actividad, debe asegurarse de llamar a createDatabase primero. Si observa el código de openDatabase, no comprueba si existe la base de datos, por lo que tiene que (intentar) crear la base de datos en cada actividad en la que la utilice o modificar el método openDatabase para comprobar que la Db existe. El enlace publicado realmente le instruye a usarlo de esta manera, pero usted (como yo) puede haber pasado por alto eso.

Malo:

 DBAdapter db = new DBAdapter(this); db.openDataBase(); //Bad! db not created yet! 

Bueno:

 DBAdapter db = new DBAdapter(this); db.createDataBase(); //needs exception handling db.openDataBase(); 

Cuando intento abrir mi DB, consigo "incapaz de abrir el archivo de la base de datos". Supongo que no encontrar el DB y no algún otro error programador. En el registro veo lo siguiente que se ve bien para mí.

  sqllite3_open_v2("/data/data/com.isildo.HelloListView/databases/ListsDB" ... 

Esta es la configuración

 private static String DB_PATH = "/data/data/com.isildo.HelloListView/databases/"; private static String DB_NAME = "ListsDB"; 

En mis activos de proyectos en el Explorador de paquetes, veo la base de datos ListsDb.

Así que al menos creo que lo tengo todo correcto. Estoy usando el ejemplo en [ http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/%5D

En uno de los puestos aquí, alguien ofrece una sugerencia sobre la configuración de algunos parámetros de activos. {No hay respuesta al mensaje allí}

 **To get an ASSETS folder into your APK: In /nbproject/project.properties, change assets.dir= to assets.dir=assets assets.available=true In /nbproject/build-impl.xml, there is line in the “if=assets.available” target that reads that needs to be changed to** 

¿Es esto algo que tenemos que hacer, y si es así, podemos obtener un poco mejor dirección sobre los cambios requeridos. No pude encontrar los lugares para hacer los cambios sugeridos que miraba la configuración del proyecto, y otras cosas.

Sí, Im nuevo para el medio ambiente, por lo que puede ser simplemente no encontrarlos. Estoy usando Eclipse en windows.

En su DBAdapter.java, cambie el tipo de openDatabase método SQLiteDatabase a SQLiteDatabase .

Cuando accede a la base de datos simplemente utilice SQLiteDatabase data = db.openDatabase() , donde db es DBAdapter db = new DBAdapter(this) .

  • Error No se puede realizar esta operación porque se ha cerrado el grupo de conexiones
  • Carga perezosa de SQLite
  • Cómo superar el límite de 65535 bytes para el código de método
  • Desempeño de Android: Archivo plano vs SQLite
  • ¿Cómo insertar datos en la base de datos SQLite en android?
  • Cómo escapar caracteres especiales como 'en sqlite en android
  • ¿Un cursor SQLite vacío devolverá true para isBeforeFirst, isAfterLast, ambos o ninguno?
  • Consulta de cursor no sensible a mayúsculas y minúsculas con operador LIKE (que funciona para todos los entornos locales)
  • Cómo hacer una copia de seguridad / restaurar la base de datos SQLite en Android a Dropbox
  • SelectionArgs in ContentResolver.query (...) puede ser una subconsulta?
  • Android JUnit4 Pruebas - ¿Dónde obtener el contexto de?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.