2010-02-23 26 views
5

Ya tengo una base de datos SQLite. Lo puse en la carpeta assets de mi proyecto. Leí la documentación de Android. Dijo que para todas las bases de datos en Android, la ruta es data/data/pack_name/database_name.¿Cómo accede Android a una base de datos sqlite incluida en la carpeta de activos

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

+0

Recomiendo el siguiente tutorial. Me ayudó mucho. Enlace: [Usando su propia base de datos sqlite en aplicaciones de Android] (http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/) –

Respuesta

7

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

Recuerde cambiar el "YOUR_PACKAGE" a su paquete de solicitud de espacio de nombres (es decir: com.examplename.myapp) en la cadena DB_PATH.

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

Si esta solicitud tenía una base de datos, que se almacena a data/data/com.example.helloandroid/database

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

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

adb -s emulator-5554 shell

tiene que sustituir 5554 por cualquier puerto que está utilizando.

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

cd data/data

Allí, se verá que eveything está en una forma de un nombre de paquete.

Más información here

6

Cuando crear una base de datos mediante la utilización de los SQLiteDatabase o SQLiteOpenHelper clases, se 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, un vistazo a Using your own SQLite database in Android Applications

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

A modo de ejemplo, mi clase comienza con este en la parte superior

package com.forloney.tracker; 

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

Espero que esto tenga sentido.

+0

"/ data/data/YOUR_PACKAGE/databases/" Pero, ¿qué es el" YOUR_PACKAGE ", significa: si el nombre de mi proyecto es Helloworld , entonces la ruta es"/data/data/Helloworld/databases/"? Gracias – user275788

+0

Creo que es correcto, estoy trabajando en este momento, de lo contrario reiniciaría mis clases y daría una respuesta directa. –

+0

No hay problema, y ​​ver mis ediciones para un ejemplo revisado de la ruta real. –

0

Cuando intento abrir mi DB, me sale "no se puede abrir archivo de base de datos". Supongo que no encuentra la base de datos ni ningún otro error del programador. En el registro veo lo siguiente que me parece bien.

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 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/]

En una de las publicaciones aquí, alguien ofrece una sugerencia acerca de la configuración de algunos de los parámetros de los activos. {ninguna respuesta a mensaje No}

**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** 

¿Esto es algo que tenemos que hacer, y si es así, ¿podemos conseguir un poco mejor dirección de los cambios requeridos. No pude encontrar los lugares para hacer los cambios sugeridos. Miré la configuración del proyecto y otras cosas.

Sí, soy nuevo en el medio ambiente, por lo que es posible que no los encuentre. Estoy usando Eclipse en Windows.

+0

No puedo encontrar build-impl.xml en mi proyecto, estoy usando eclipse. – herbertD

1

@ScCrow Yo también seguí el ejemplo this y tuve los mismos problemas que tenía hasta que me di cuenta de que no estaba usando el DataBaseHelper correctamente (o más bien tenía una peculiaridad que pasé por alto).

Cuando utiliza su clase DatabaseHelper en su actividad, ¡primero debe asegurarse de llamar a createDatabase! Si observa el código de openDatabase, NO verifica si la base de datos existe, por lo que debe (intentar) crear la base de datos en cada actividad en la que la usa o modificar el método openDatabase para verificar que el db existe. El enlace publicado en realidad le indica que lo use 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(); 
0

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

Al acceder a la base de datos, simplemente use SQLiteDatabase data = db.openDatabase(), donde db es DBAdapter db = new DBAdapter(this).

Cuestiones relacionadas