¿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 ?

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) .

  • Problema sobre sqlite base de datos, no tal tabla:
  • ¿Qué podría estar causando este SQLite CursorWindowAllocationException?
  • Acceso a la aplicación de Android Lite para Android
  • Diferencias de SQLite entre Android 2.1 y 2.2
  • Problema con SQL Query Android Where Clause
  • Utilizar la instrucción LIMIT en una consulta SQLite
  • Utilice Insertar o Reemplazar en ContentProvider
  • Obtener fila aleatoria de SQLite Database Android SDK
  • Cuente el número de tablas en la base de datos sqlite
  • Eliminar la base de datos sqlite al actualizar la nueva versión de la aplicación
  • Cómo persistir el permiso en android API 19 (KitKat)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.