Dase de datos SQLite precargada y modificable

2,231 views
Skip to first unread message

Cristian Garrido

unread,
Feb 20, 2012, 2:27:57 AM2/20/12
to desarrollad...@googlegroups.com
Hola, buenas :D !!

Estoy desarrollando una aplicacion en donde hare uso de una bd donde necesito que vayan algunos datos ya precargados. Y estos una vez ya instalada la aplicacion, el usuario pueda seguir añadiendo.

La verdad no se me ocurre ninguna solucion a esto. porque se que las bases de datos creadas se guardan en /data/data/nombrepaquedelaapp y si agrego una bd al apk quedara solo de lectura o me equivoco??

 lo otro seria hacer dos bd (una dentro del apk y otra en /data...) y luego volcar en la primera ejecucion el contenido desde la apk a /data...

que me recomiendan???

PD: lo de volcar se me ocurrio mientras escribia el correo xD

Saludos, en espera de cualquier comentario. Gracias (:

--
_________________________________________
Cristian Andrés Garrido Salas.
Estudiante Ing. Civil en Computación e Informática
Universidad Arturo Prat.
Iquique - Chile
(+56) (9) 74531260

"Un sueño no es una ilusión, sino una realidad lejana, pero no inalcanzable..."

Jenkins

unread,
Feb 20, 2012, 5:51:01 AM2/20/12
to desarrolladores-android
Trabajar con BBDD en android es extremadamente sencillo, y como con
cualquier base de datos, en SQLite se puede añadir, borrar y modificar
registros (y si me apuras tambien te diria que existe la posibilidad
de añadir o borrar tablas, aunque de esto no estoy seguro porque nunca
lo he necesitado). Para modificar los datos de la base de datos solo
debes recuperar una estancia del objeto en modo Writable y realizar
cualquier consulta sql,,,,

Cristian Garrido

unread,
Feb 20, 2012, 6:32:07 AM2/20/12
to desarrollad...@googlegroups.com
si, lo se.pero al ir la BD precargada como recurso no impidiria la escritura? por lo que si o si deberia hacer una copia de esta. y creando otra permanente en /data...



Para modificar los datos de la base de datos solo
debes recuperar una estancia del objeto en modo Writable y realizar
cualquier consulta sql,,,

no entiendo esto. dices que si se puede modificar aun estando dentro del apk?

seguire investigando. gracias por la respuesta.


--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.

Jenkins

unread,
Feb 20, 2012, 6:46:37 AM2/20/12
to desarrolladores-android
claro que se puede modificar,,, si no fuera asi, no tendria ningun
sentido el uso de la BBDD porque en el caso de que solo fuera para
almacenar valores y no poder añadir recursos, seria mucho mas optimo
el uso de variables o constantes, puesto que de este modo ahorrarias
al sistema el proceso de tener que acceder a la propia base de datos.

se puede acceder a la BBDD en dos modos: readable, mediante el metodo
getReadableDatabase del objeto, que sirve para realizar consultas sql
que no necesiten modificar los datos que esta contiene; o en modo
writable, mediante el metodo getWritableDatabase, que permite realizar
consultas como update, delete o insert.

Javier Hdez

unread,
Feb 20, 2012, 7:25:21 AM2/20/12
to desarrolladores-android
Hola,

Lo que se suele hacer es crear una condición para cuando se inicie la
aplicación , sino existe la DB crearla y generar la consulta, en caso
de que exista la DB pues nada, a utilizarla, ya puedes hacer el CRUD
sin problemas con ella.

Dentro del apk no hay DB ninguna.

Saludos

On 20 feb, 11:32, Cristian Garrido <crgarrid...@gmail.com> wrote:
> si, lo se.pero al ir la BD precargada como recurso no impidiria la
> escritura? por lo que si o si deberia hacer una copia de esta. y creando
> otra permanente en /data...
>
> Para modificar los datos de la base de datos solo
>
> > debes recuperar una estancia del objeto en modo Writable y realizar
> > cualquier consulta sql,,,
>
> no entiendo esto. dices que si se puede modificar aun estando dentro del
> apk?
>
> seguire investigando. gracias por la respuesta.
>

Javier Hdez

unread,
Feb 20, 2012, 7:25:42 AM2/20/12
to desarrolladores-android
*alguna

Jenkins

unread,
Feb 20, 2012, 7:48:42 AM2/20/12
to desarrolladores-android
Te corrijo... no hace falta ninguna condición para crear la BBDD, en
realidad no conozco y creo que no hay ningún método para comprobar si
existe la base de datos o no. Lo que hace el sistema android es que en
el momento de instanciar el objeto de la base de datos, si esta no
existe la crea con la misma estructura que se haya definido en el
método sobrescrito de la clase (donde además de definir las tablas que
contendrá, es posible también añadir los registros que deseemos en
cada tabla de forma predeterminada); en el caso de que en el momento
de instanciar el objeto de la base de datos esta ya exista (por
ejemplo cuando se haya instanciado en una actividad anterior, o se
haya ejecutado la app con posteridad), simplemente acceda a la base de
datos ya creada.... pero todo este proceso lo hace el propio sistema
automáticamente y de forma invisible al usuario, por lo que no se
precisa de ningún tipo de condicional para saber si la base de datos
esta creada o no, como ya he comentado creo que ni tan solo existe
modo para saber si la base de datos ha sido creada con anterioridad.

Javier Hdez

unread,
Feb 20, 2012, 8:17:49 AM2/20/12
to desarrolladores-android
it's simple: Open your database in try block with path of da databse
like:




try{
   SQLiteDatabase   dbe = SQLiteDatabase.openDatabase("/data/data/
bangla.rana.fahim/databases/dictionary", null,0);
            Log.d("opendb","EXIST");
            dbe.close();
            }
if an exception occurs then database doesn't exit so create it:




catch(SQLiteException e){
                Log.d("opendb","NOT EXIST");




            SQLiteDatabase db = openOrCreateDatabase("dictionary",
MODE_PRIVATE, null);
                    db.execSQL("CREATE TABLE IF NOT EXISTS LIST(wlist
varchar);");




                    db.execSQL("INSERT INTO LIST VALUES('খবর');");
                    db.execSQL("INSERT INTO LIST VALUES('কবর');"); //
whatever you want
                 db.close();
}
that's it you are done :)

Javier Hdez

unread,
Feb 20, 2012, 8:20:17 AM2/20/12
to desarrolladores-android
Creo que tu te refeires a SQLiteOpenHelper que si no existe la crea y
hasta la actualiza si es necesario:

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

On 20 feb, 12:48, Jenkins <jenkins2...@hotmail.es> wrote:

Mauricio Montilla

unread,
Feb 20, 2012, 2:50:26 PM2/20/12
to desarrollad...@googlegroups.com
Cristian, creo que han malinterpretado tu pregunta. ¿no?

Tu lo que quieres es que la base de datos de tu aplicación tenga datos
precargados ¿no?

Para eso te puede ayudar este post
http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
ó puedas guiarte con este código http://x.co/h4Fr

Es eso lo que estas buscando o me equivoco?

Saludos

Mauricio

El día 20 de febrero de 2012 08:27, Cristian Garrido
<crgar...@gmail.com> escribió:

Javier Hdez

unread,
Feb 20, 2012, 3:09:25 PM2/20/12
to desarrolladores-android
No no hay mal interpretación, es que no va la DB adjunta al apk, lo
que se adjuntan son los datos que se cargarán en la DB que se cree en
el terminal Android cuando se instale la app.

On 20 feb, 19:50, Mauricio Montilla <mauriciomonti...@gmail.com>
wrote:
> Cristian, creo que han malinterpretado tu pregunta. ¿no?
>
> Tu lo que quieres es que la base de datos de tu aplicación tenga datos
> precargados ¿no?
>
> Para eso te puede ayudar este posthttp://www.reigndesign.com/blog/using-your-own-sqlite-database-in-and...
> ó puedas guiarte con este códigohttp://x.co/h4Fr
>
> Es eso lo que estas buscando o me equivoco?
>
> Saludos
>
> Mauricio
>
> El día 20 de febrero de 2012 08:27, Cristian Garrido
> <crgarrid...@gmail.com> escribió:

Mauricio Montilla Figueroa

unread,
Feb 20, 2012, 3:15:15 PM2/20/12
to desarrollad...@googlegroups.com

Javier, perdona pero creo que el mas indicado para decir si se ha malinterpretado o no su pregunta, es la persona quien la hizo.

Cristian Garrido

unread,
Feb 20, 2012, 5:02:25 PM2/20/12
to desarrollad...@googlegroups.com

Javier, perdona pero creo que el mas indicado para decir si se ha malinterpretado o no su pregunta, es la persona quien la hizo.

jaja, cierto. es lo que dice Mauricio tengo una bd precargada dentro del apk.
eso es lo que necesito, gracias Mauricio.
y gracias a todos igual. :D

Javier Hdez

unread,
Feb 20, 2012, 7:25:44 PM2/20/12
to desarrolladores-android
"si, lo se.pero al ir la BD precargada como recurso no impidiria la
escritura? por lo que si o si deberia hacer una copia de esta. y
creando
otra permanente en /data... "

Es que no hay DB alguna, hay unos datos que serán cargados en la DB,
cuando ésta se cree, si es que es necesario (pero no hay DB, si ni
siquiera se ha creado aún).

"Con lo de hacer copia de ésta" ¿no se refiere a la DB?

Me da que no está malinterpretado.

De todas formas, disculpen si está malinterpretado.

Cristian Garrido

unread,
Feb 20, 2012, 9:04:09 PM2/20/12
to desarrollad...@googlegroups.com
es que si existe. y la guardo en /assets/fichero.db y esta contiene cerca de 3000 registros que utilizare para la comparacion despues.

pero luego necesito seguir agregando tuplas en otras tablas. y me resulta incomodo trabajar con dos DB separadas.

La solucion es la que da Mauricio en el link.

gracias igual.

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.

Javier Hdez

unread,
Feb 20, 2012, 9:22:21 PM2/20/12
to desarrolladores-android
Ok, si es cierto, no recordaba eso y eso que lo hice una vez, estaba
buscando un código para después de instalarla la aplicación cargara
los datos, pero no lo encuentro, una vez que tuve que hacer algo así,
pero hace tiempo ya.

Gracias y saludos.

On 21 feb, 02:04, Cristian Garrido <crgarrid...@gmail.com> wrote:
> es que si existe. y la guardo en /assets/fichero.db y esta contiene cerca
> de 3000 registros que utilizare para la comparacion despues.
>
> pero luego necesito seguir agregando tuplas en otras tablas. y me resulta
> incomodo trabajar con dos DB separadas.
>
> La solucion es la que da Mauricio en el link.
>
> gracias igual.
>

Jenkins

unread,
Feb 21, 2012, 5:34:06 AM2/21/12
to desarrolladores-android
Pues no se si soy cabezota o que .... pero sigo opinando que con lo
facil que es trabajar con el sistema de BBDD nativo de android, que
permite agregar datos en el momento de crear la base de datos (supongo
que es a lo que te refieres con datos precargados), añadir registros
en cualquier momento, del mismo modo que consultarlos, modificarlos o
borrarlos de forma muy sencilla... es ganas de complicarse la vida XDD
No encuentro el que de trabajar con dos BBDD, en algunos casos puede
ser necesario, pero si la unica funcion que cumple una de estas base
de datos es contener unos registros que deberán de ser volcados a la
segunda BBDD, no es muy óptimo. Investiga un poco sobre
SQLiteOpenHelper que hay un montón de información sobre la clase y
veras que puedes hacer maravillas con ella de forma mas que sencilla.

Mauricio Montilla

unread,
Feb 21, 2012, 5:45:22 AM2/21/12
to desarrollad...@googlegroups.com
No se trabaja con dos bases de datos. Lo que se hace es que al momento
que Android intenta crear la base de datos de la aplicación, se copia
la bd que se tiene en la carpeta assets. De este modo, tendras una
base de datos con información en lugar de una vacia.

Juamir Garcia

unread,
Dec 31, 2012, 7:44:39 PM12/31/12
to desarrollad...@googlegroups.com
Yo estuve leyendo al respecto para hacerlo valiendome de la carpeta assets colocando allí una copia precargada de la base de datos y luego en la primera ejecución de la aplicación copiar la base de datos a /databases/.

"La carpeta Assets es un direcctorio adicional (un "apéndice") que se incluye en el paquete *.apk de la aplicación por tanto la clase R no genera ID's para estos archivos, por tanto es menos compatible con las clases de android y su acceso puede ser mas dificultoso para las clases y métodos. También hay un limite de 1mb para los archivos que pueden ser colocados en esta carpeta.  Sin embargo el directorio es mucho más flexible y permite almacenar tipos de archivos que no pueden ser incluidos en la carpeta res y por tanto no se pueden incluir en su carpeta hija raw, lo que permite que ciertas operaciones sean más fáciles, la carpeta es ideal para por ejemplo copiar un archivo de base de datos en la memoria del sistema. No hay manera (fácil) para crear en Android una referencia XML a los archivos dentro de la carpeta assets."


Lamento no poder ayudarte mas.
Reply all
Reply to author
Forward
0 new messages