Vous êtes sur la page 1sur 13

29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners

http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 1/13
NetRunners
Hijos del Ciberespacio
45 Me gusta 6 Tweet 21
StumbleUpon
Usar nuestra propia Base de Datos SQLite en Android
Comienzo con ste una serie de tutoriales relacionados con la aplicacin de la Feria de Albacete 2011 en la que se
explicar paso por paso como dotar de diversas caractersticas a nuestras aplicaciones.
En este caso explicar como utilizar una base de datos con datos por defecto, es decir, utilizando un fichero externo
de base de datos creado con un editor de bases de datos SQLite.
Paso 1: Preparando el fichero de base de datos SQLite
Una vez tengamos nuestro propio fichero de base de datos tendremos que modificarla un poco. Para editar la base de
datos utilizaremos la aplicacin de cdigo abierto SQLite Database Browser disponible para Windows Mac y Linux.
Abrimos nuestro fichero de base de datos y aadimos una nueva tabla llamada android_metadata. Para ello
podemos ejecutar el siguiente cdigo SQL:
Seguidamente insertamos una nueva fila con el texto es_ES en la tabla recin creada.
Una vez hecho esto tenemos que cambiar el nombre identificativo de las claves primarias de las tablas de nuestra
base de datos a _id para que de esta manera Android pueda identificarlas. Para ello podemos hacer clic en el botn
, y tras seleccionar la tabla que queremos modificar, podremos editar el nombre del campo.
Finalmente nuestra base de datos tiene que tener un aspecto similar al siguiente:
Paso 2: Manejando la Base de Datos desde nuestra Aplicacin Android
Para poder tener acceso desde nuestra aplicacin al fichero de base de datos ste debe encontrarse en una carpeta
dentro de nuestro proyecto llamada assets. Si ya est creada, copiamos el fichero de base de datos ah, si no,
tendremos que crear la carpeta antes.
2011
09/19
CATEGORIA
Android
Tutoriales
57 comentarios
INICIO Android . Tutoriales Usar nuestra propia Base de Datos SQLite en Android
CANAL RSS
Buscar
GIBRN KHALIN GIBRN
Dadme Silencio y Desaf iar a la
Noche
ENTRADAS RECIENTES
Curso Abierto Online de Desarrollo de
Aplicaciones Android
Consigue hasta 4.5 Gb Extra en Dropbox
HTML5 Clock
Ilusin ptica con Figura de Papel
Convertir una Botella de Plstico en una
Bombilla Solar
COMENTARIOS RECIENTES
Ariana en El cuerpo perf ecto en 21 das
AARON JORDAO en El cuerpo perf ecto en
21 das
ANoNiMuS en El cuerpo perf ecto en 21
das
anonimo en El cuerpo perf ecto en 21 das
Johnd754 en Amaral 2008 Gato negro
dragon rojo
CATEGORAS
Abandonware
Android
Anime
Artes Marciales
Cine
Cmics
Cortos
Curiosidades
Cursos
Cyberpunk
Desarrollo
Descargas
Enlaces
Gadgets
Geek
General
Hacking
Hacktivismo
Hazlo Tu Mismo
HTML5
Share 2
1 CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'es_ES')
1 INSERT INTO "android_metadata" VALUES ('es_ES')
INICIO Sobre Mi
?
?
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 2/13
El manejo de la base de datos se har utilizando una clase personalizada que extender la clase SQLiteOpenHelper,
en la cual podremos incluir todos los mtodos relacionados con la base de datos para insertar, actualizar y borrar
datos.
Recuerda cambiar en el siguiente cdigo las cadenas TU_PAQUETE y NOMBRE_DE_FICHERO por el nombre del
paquete de tu proyecto, y el nombre del fichero de tu base de datos respectivamente.
Paso 3: Mtodos tiles de lectura, insercin, actualizacin y borrado
A continuacin pongo ejemplos de los mtodos ms habituales de uso de base de datos que deberan introducirse en
la misma clase DBHelper. Para ello utilizar como ejemplo la tabla que puede verse en la imagen del Paso 1, que
consta de tres columnas (_id, alarma y evento):
Los mtodos de insercin, borrado y actualizacin son bastante simples. Para ms informacin sobre ellos podis
echarle un ojo a la informacin de la clase SQLiteDatabase.
Por otro lado, para la lectura de la base de datos, se utiliza el mtodo query, el cual nos devuelve un cursor con las
filas que se corresponden con el criterio de bsqueda. Mi recomendacin para evitar el uso de cursores en nuestra
aplicacin es crear objetos de una clase propia personalizada para el tipo de datos que vamos a recuperar. De este
modo nuestros mtodos devolvern el tipo de objetos que realmente vamos a utilizar. Para este ejemplo utilizamos el
tipo de objeto Alarma que contiene los dos campos de la base de datos que queremos utilizar como variables:
De este modo podemos crear dos tipos de mtodos para obtener datos. Uno que nos devuelva un nico resultado, y
otro que nos devuelva un objeto List<Alarma> con todos los resultados. Para ms informacin acerca del mtodo
query y crear consultas ms avanzadas os recomiendo echarle un ojo a la informacin de la clase SQLiteDatabase:
Humor
Juegos
Linux
Meditacin
Msica
Noticias
Opinin
Puzzles
Rutinas
Sostenibilidad
Trailers
Tutoriales
Uncategorized
Vida Sana
Videos
+ expand source
1
2
3
4
5
6
7
//Establecemos los nombres de las columnas
public static final String KEY_ID = "_id";
public final static String KEY_COL1 = "alarma";
public final static String KEY_COL2 = "evento";

//Array de strings para su uso en los diferentes mtodos
private static final String[] cols = new String[] { KEY_ID, KEY_COL1, KEY_COL2 };
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* INSERTAR NUEVA ALARMA
* */
public long insertAlarma(Integer id, Integer alarma, Integer evento) {
ContentValues newValues = new ContentValues();
newValues.put(KEY_ID, id);
newValues.put(KEY_COL1, alarma);
newValues.put(KEY_COL2, evento);
return db.insert(DATABASE_TABLE, null, newValues);
}

/**
* BORRAR ALARMA CON _id = _rowIndex
* */
public boolean removeAlarma(long _rowIndex) {
return db.delete(DATABASE_TABLE, KEY_ID + "=" + _rowIndex, null) > 0;
}

/**
* ACTUALIZAR ALARMA _id = _rowIndex
* */
public boolean updateAlarma(Integer _rowIndex, Integer alarma, Integer evento) {
ContentValues newValues = new ContentValues();
newValues.put(KEY_COL1,alarma);
newValues.put(KEY_COL2, evento);
return db.update(DATABASE_TABLE, newValues, KEY_ID + "=" + _rowIndex, null) > 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
public class Alarma {

private Integer Evento;
private Integer Alarma;

public Alarma(Integer idEvento, Integer idAlarma) {
super();
this.idEvento = idEvento;
this.idAlarma = idAlarma;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public Alarma getAlarma(long _rowIndex) {
Alarma alarm = new Alarma();
Cursor result = db.query(true, DATABASE_TABLE,
cols,
KEY_ID + "=" + _rowIndex, null, null, null,
null, null);
if ((result.getCount() == 0) || !result.moveToFirst()) {
//Si la alarma no existe, devuelve una alarma con valores -1 y -1
alarm = new Alarma(-1,-1);

} else {
if (result.moveToFirst()) {
alarm = new Alarma(
result.getInt(result.getColumnIndex(KEY_COL1)),
result.getInt(result.getColumnIndex(KEY_COL2))
);
}
}
?
?
?
?
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 3/13
Paso 4: Utilizando la clase DBHelper
Una vez tenemos creada la clase DBHelper el uso de la misma es bastante trivial. Basta con crear un objeto
DBHelper y llamar a los mtodos open() y close() antes y despus de utilizar los mtodos de uso que hayamos
creado. Mi recomendacin es llamar al mtodo open() en los mtodos onCreate() y onResume() de la actividad que
vaya a utilizar la base de datos y close() en el mtodo onPause().
Si tenis cualquier consulta, dejadla en un comentario.
Aqu os dejo un ejemplo algo ms avanzado que seguro que os resultar de utilidad:
EJEMPLO NETRUNNER SQLITE
Hola, yo estaba siguiendo el tutorial en ingles, pero el tuyo me agrego algunas cosas que me faltaban, gracias
=D
Pero ahora tnego un problema:
En el checkDataBase() en la linea:
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
Se supone que si no existe solo debulve un null, que al final genera un false, y sigue el proceso, peeeero al
llegar a esa linea me genera un error diciendome que no encuentra el path lo cual es obvio por que no existe,
pero segun yo ese error no deberia generarse.
No se si podrias ayudarme, te lo agradeceria muchisimo =)
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
return alarm;
}

public List<Alarma> getAlarmas() {
ArrayList<Alarma> alarms = new ArrayList()<Alarma>;
Cursor result = db.query(DATABASE_TABLE,
cols, null, null, null, null, KEY_ID);
if (result.moveToFirst())
do {
alarms.add(new Alarma(
result.getInt(result.getColumnIndex(KEY_COL1)),
result.getInt(result.getColumnIndex(KEY_COL2))
)
);
} while(result.moveToNext());
return alarms;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class miActividad extends Activity {

private DBHelper BD;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//Creamos y abrimos la base de datos
BD=new DBAdapter(this);
BD.open();

//Insertamos una nueva alarma con valores _id=1, alarma=1, evento=1
BD.insertAlarma(1, 1, 1);

//Modificamos la alarma anterior dejndola como _id=1, alarma=2, evento=3
BD.updateAlarma(1, 2, 3);

//Obtenemos la alarma creada anteriormente
Alarma alarma = BD.getAlarma(1);

//Borramos la alarma creada anteriormente con ndice 1
BD.removeAlarma(1)

//Obtenemos un listado de todas las alarmas
ArrayList<Alarma> alarmas = new ArrayList()<Alarma>;
alarmas =(ArrayList<Alarma>) BD.getAlarmas();

}

@Override
public void onPause() {
super.onPause();
BD.close();
}
@Override
public void onResume() {
super.onResume();
BD.open();
}
Escribir un comentario RSS de los comentarios Enlaces ( 1 ) Comentarios ( 57 )
Luz
14 marzo 2012 7:12pm
RESPONDER CITAR

?
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 4/13
Perdona por haber tardado en responder. Vamos a ver:
checkDB es null por la asignacin anterior al bloque try catch. Si la base de datos no existe, se genera una
excepcin SQLiteException, y no se hace nada porque es capturado en ese mismo bloque try catch, por lo que
si genera un error es normal.
Si el error que te da no es SQLiteException el error puede venir por otro sitio.
Hola. Muy buen tutorial. El asunto es que como hago para registra en el Android Manifest la clase DBhelper
creada. Gracias de antemano.
Hola buenos das, no es necesario que en el manifest este registrado solo es que crees la clase haciendo
herencia de class tunombreclase extends SQLiteOpenHelper {}
en el manifest solo debes de tener permisos como estos
Buenas Tardes amigo el codigo parece estar muy bien armado pero siempre me da error cuando lo emulo en el
telefono no se si me podrias pasar el codigo o el proyecto completo para verificarlo bien ya que me hace falata
este parte para un proyecto de pasantias q estoy haciendo. Muchas Gracias espero tu ayuda
@Cardiobeta
No es necesario registrar la clase en el Manifest puesto que no es una Actividad que deba manejar la
aplicacin. Es tan solo una clase de ayuda que te permite acceder a la base de datos. En Android puedes
crearte todas las clases auxiliares que necesites ya que no deja de ser Java.
@Ehison Perez
No puedo pasarte el proyecto completo porque forma parte de un proyecto ms grande. Sin embargo me has
dado una idea de crear un ejemplo ms pequeo y subirlo. Pero ahora no dispongo de mucho tiempo y no se
cuando podr tenerlo a punto.
De todas formas, el error que te puede estar dando en el telfono puede venir de no meter el fichero
correctamente en la carpeta assets.
El problema que tiene programar en android es que no es muy sencillo depurar la ejecucin. Te recomiendo
hacer lo siguiente:
- En los lugares donde creas que puede estar viniendo el error (cath, etc.) coloca el siguiente cdigo,
personalizando los mensajes a tu gusto:
Log.d(DEBUG ANDROID, Mensaje de depuracin);
-En eclipse vas a Window->Show View->Other y en la carpeta de Android vers LogCat, le das a OK y se
te mostrar una ventana dnde podrs ver todos los mensajes de debug de la aplicacin, y te permitir crear
filtros. En este caso, y segn el cdigo que te he puesto, lo suyo es crear un filtro por DEBUG ANDROID, y
as podrs tener algo de informacin sobre lo que est sucediendo.
Miguel S. Mendoza
25 marzo 2012 1:56pm
RESPONDER CITAR
Cardiobeta
29 marzo 2012 8:58pm
RESPONDER CITAR
Felipe Hernandez Palafox
17 junio 2013 4:29pm
RESPONDER CITAR
Ehison Perez
30 marzo 2012 10:39pm
RESPONDER CITAR
Miguel S. Mendoza
2 abril 2012 2:28pm
RESPONDER CITAR
Miguel S. Mendoza
2 abril 2012 2:41pm
RESPONDER CITAR
Juan
16 abril 2012 8:31pm
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 5/13
Hola me gustaria que me ayudaras a saber como insertar acentos y caracteres raros en la base de datos, segui
el tutorial al pie de la letra y funciona bien, pero a la hora de meter acentos o tildes los guarda como caracteres
raros la base de datos, y al ser jalados por java e imprimirlos, los imprime igual que en la base de datos. De
antemano muchas gracias!!!!!! =)
Buen dia, una duda alquien sabe por uqe cuando alamaceno una URL en un campo Text de sql, cuando hago la
consulta select URL from Tabla me salen incompletas las url, salen hasat el http:// o http://www. pero de ahi
en adelante no salen, tengo poca esxperiencia en sqlite solo habi utilizado mysql.
espero alguien pueda ayudarme con esta duda.
Gracias.
@Juan
En el SQLite Database Browser, tienes que cambiar la codificacin de caracteres de la base de datos.
Actualmente debes de tenerlo en UTF. Para cambiarlo le das a Edit->Preferences y cambias la combo de
Database encoding a Latin, y as debera funcionar.
@nac13k
En TEXT no hay restriccion de caracteres. Comprueba el modo en el que estas introduciendo los datos en la
base de datos. Quiz ests cometiendo algn error en la concatenacin a la hora de parsear las instrucciones
INSERT.
Muchachos, la info est excelente, soy novato en el tema y tengo una duda grande(para mi):
Por lo general muchas de las aplicaciones existentes, tienen bases de datos con informacin inicial para el
correcto funcionamiento de la app, me gustara saber si tienen links o informacin donde me pueda documentar
acerca de como distribuir estas bases de datos iniciales en los apk.
Muchas gracias
@Diego
Este tutorial es precisamente para utilizar bases de datos externas que podamos distribuir de manera inicial
dentro del proyecto. Lo que ocurre realmente al utilizar un fichero externo es que la aplicacin crea su propia
base de datos vaca y copia los contenidos del fichero, de tal forma que cualquier modificacin que se haga en
la base de datos con la aplicacin ya no implicara al fichero en s, ya que toodas las consultas y
modificaciones se haran en la base de datos propia de la aplicacin.
He aadido una captura de cmo quedara el proyecto aadiendo el fichero de base de datos porque es posible
que esa parte no quedara muy clara.
Puedes utilizar cualquier fichero de SQLite, la extensin no es necesaria, lo nico que tienes que tener en
cuenta es que debe existir la tabla android_metadata y que la clave primaria de todas las tablas que vayas a
utilizar se tiene que llamar _id.
nac13k
26 abril 2012 6:10pm
RESPONDER CITAR
Miguel S. Mendoza
30 abril 2012 11:26am
RESPONDER CITAR
Miguel S. Mendoza
30 abril 2012 11:30am
RESPONDER CITAR
Diego
14 mayo 2012 11:53pm
RESPONDER CITAR
Miguel S. Mendoza
16 mayo 2012 3:37pm
RESPONDER CITAR
reddreik
18 mayo 2012 5:14am
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 6/13
Hola:
Estoy tratando de usar tu coidgo como base para una aplicacion, pero cuando lo corro en el emulador me da
error y debo cerrarlo, no se si puede enviarme el coidgo de la clase DBHelper, para comprarlo como lo hice y la
preicpal donde se activa.
muchas gracias.
@reddreik
Estoy preparando una reestructuracin del tutorial con un proyecto completo de ejemplo, dnde tambin creo el
Adaptador de la Base de Datos como un Servicio accesible para otras aplicaciones. Espero tenerlo listo para
este fin de semana.
Buenas noches. Quisiera saber por qu implementas la interface Serializable en tu clase Alarma, es esto
obligatorio?. Es que soy nuevo en Java no se si es necesario.
La mayora del cdigo del tutorial lo saqu de otra aplicacin ms grande en la que necesitaba que la clase
fuera serializable, pero no es obligatorio para este tutorial. Voy a quitarlo para no confundir. Gracias por el
apunte,
De todas formas si quieres hacer una buena base de datos descrgate el cdigo de ejemplo que aparece al
final, ya que todava no he tenido tiempo de modificar el tutorial, y ese cdigo es bastante ms eficiente.
@Luz
Luz, lograste solucioanr ese tema? Tengo el mismo error y pues soy nuevo en el tema y no estoy seguro qu
pueda ser.
que tal amigo como esta fijate que me descargue el ejemplo del cual comentas, pero fijate que me esta tirando
error en el archivo SQLiteActivity.java, no se si pudieras echarme la mano con esos errorsitos que estan
saliendo, los errores salen en estos mtodos:
public void onClick(DialogInterface dialog, int id)
public void onClick(DialogInterface dialog, int id)
public void onClick(DialogInterface dialog, int id)
onClick(DialogInterface dialog, int id)
onClick(DialogInterface dialog, int id)
onClick(DialogInterface dialog, int id)
onServiceConnected(ComponentName className, IBinder service)
onServiceDisconnected(ComponentName arg0)
de antemano muchas gracias y muy buen aporte.
llevo un rato buscando como laburar con mi propia base de datos y hacerlo de la formas mas simple, sin tener
que escribir lineas y lineas de java, con este ejemplo me diste una mano enorme Muchas gracias por el
Aporte!
Miguel S. Mendoza
21 mayo 2012 10:33pm
RESPONDER CITAR
Dark Musician
7 julio 2012 7:34am
RESPONDER CITAR
Miguel S. Mendoza
14 julio 2012 12:40am
RESPONDER CITAR
John David
24 julio 2012 12:01am
RESPONDER CITAR
Walter Cordero
24 julio 2012 6:43am
RESPONDER CITAR
Marcos
10 septiembre 2012 2:37am
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 7/13
@Walter Cordero
Has comprobado los permisos de la aplicacin?
Hola!!!
Excelente Tutorial!!!, Cuando trato de probar un ejemplo que hice en la consola virtual me funciona muy bien,
pero cuando creo el .apk y lo paso a mi dispositivo me cuelga la aplicacin cuando trato de consultar la base de
datos.
Alguien le ha pasado esto?
Saludos!
Comprueba los permisos
Muy buen tutorial, me ha ayudado a mucho.
De todas formas me gustara puntualizar un detalle. No es necesario cambiar las claves primarias para que se
llamen _id. El problema lo puede dar cuando usamos un CursorAdapter en la base de datos, pero eso se puede
solucionar de otra manera.
Por ejemplo, en una tabla donde la clave primaria sea codigo, el select podra hacerse as:
SELECT codigo as _id, [codigo], valor1, valor2, FROM tabla.
Esto puede ser de ayuda cuando, por ejemplo, tenemos una clave primaria formada por dos campos juntos. En
ese caso slo uno de los campos se debe enteder como el _id que necesitamos.
Buena puntualizacin,
Hola, estamos usando el cdigo del ejemplo que tienes subido como base para interactuar con la base de
datos de nuestra app.
Queremos guardar un dato utilizando el mtodo addClient, pasndole una String dirctamente, pero nos salen
estos errores.
11-23 19:13:18.036: W/System.err(19774): java.lang.NullPointerException
11-23 19:13:18.036: W/System.err(19774): at
hepapptology.david.parser.ParserActivity.addClient(ParserActivity.java:137)
11-23 19:13:18.036: W/System.err(19774): at
hepapptology.david.parser.ParserActivity.onCreate(ParserActivity.java:73)
11-23 19:13:18.036: W/System.err(19774): at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-23 19:13:18.036: W/System.err(19774): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-23 19:13:18.046: W/System.err(19774): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
Annimo
10 septiembre 2012 8:50am
RESPONDER CITAR
AngelH
19 noviembre 2012 5:26pm
RESPONDER CITAR
anonimo
19 noviembre 2012 8:55pm
RESPONDER CITAR
davidjcd
22 noviembre 2012 2:44pm
RESPONDER CITAR
Miguel S. Mendoza
22 noviembre 2012 6:31pm
RESPONDER CITAR
DMC
23 noviembre 2012 10:06pm
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 8/13
11-23 19:13:18.046: W/System.err(19774): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-23 19:13:18.046: W/System.err(19774): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-23 19:13:18.046: W/System.err(19774): at android.os.Handler.dispatchMessage(Handler.java:99)
11-23 19:13:18.046: W/System.err(19774): at android.os.Looper.loop(Looper.java:123)
11-23 19:13:18.046: W/System.err(19774): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-23 19:13:18.046: W/System.err(19774): at java.lang.reflect.Method.invokeNative(Native Method)
11-23 19:13:18.046: W/System.err(19774): at java.lang.reflect.Method.invoke(Method.java:521)
11-23 19:13:18.046: W/System.err(19774): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-23 19:13:18.046: W/System.err(19774): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-23 19:13:18.046: W/System.err(19774): at dalvik.system.NativeStart.main(Native Method)
Hemos revisado todo el cdigo, y no encontramos el error. El caso es que nos funciona la aplicacin, y nos
muestra el contenido de la base de datos, pero no logramos escribir en ella. l nico cambio realizado ha sido
quitar el context menu, y llamamos al mtodo de aadir directamente.
Muchas gracias.
Un saludo!
Sin ver el cdigo del proyecto lo nico que te puedo decir es que en la lnea 137 del fichero ParserActivity.java
ests utilizando un objeto que no has inicializado. Sospecho que puede ser el objeto dbAdapter, pero no te lo
aseguro. Utiliza el mtodo Log.e(TAG, ALGUNA VARIABLE.toString()) para comprobar el valor de las variables
y objetos de esa lnea. Antes de hacer consultas a la base de datos procura comprobar que ese objeto est
inicializado, ya que si no recuerdo mal cuando se inicializa, se inicializa tambin una variable booleana llamada
mBound que indica que se ha realizado la conexin a la base de datos.
Hola de nuevo amigo. No doy con ello, me estoy volviendo loco comprobando donde puede estar el error
Te paso el link del proyecto entero por si puedes echarlo un vistazo.
https://dl.dropbox.com/u/13885050/proyectoDMC.rar
Consiste en un parser sencillo de un XML y luego queremos meter lo que leemos en la base de datos (de
momento solo estamos intentando meter un solo dato para probar).
Gracias de antemano.
Un saludo!
Como supona intentas meter datos en la base de datos antes de realizar la conexin a la misma. La conexin
se realiza en el mtodo onStart(), y el cdigo de tu proyecto que inserta datos en la base de datos, est en
onCreate(), que se ejecuta antes. chale un ojo a
http://developer.android.com/reference/android/app/Activity.html dnde se muestra el ciclo de vida de las
Actividades y el orden en el que los mtodos son llamados. La solucin pasa por extraer el cdigo de insercin
de datos a un mtodo y llamarlo justo antes de la llamada a loadSecciones() en el mtodo onServiceConnected
del objeto mConnection. Proyecto arreglado: https://www.dropbox.com/s/8txzv82zkr61qwh/DMC.zip
MUCHSIMAS GRACIAS! Llevaba varios das con ello y el problema es que no tena claro lo del ciclo de vida
(que es elemental :S).
Gracias por tu tutorial, un ejemplo buensimo y recomendable para todo el que quiera probarlo.
Miguel S. Mendoza
23 noviembre 2012 10:31pm
RESPONDER CITAR
DMC
26 noviembre 2012 6:42pm
RESPONDER CITAR
Miguel S. Mendoza
26 noviembre 2012 7:13pm
RESPONDER CITAR
DMC
26 noviembre 2012 11:39pm
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 9/13
Seguriemos con el proyecto a ver si llegamos a buen puerto Muchas gracias de nuevo por tu aporte y por tu
respuesta prcticamente instantnea
Un saludo!
De nada hombre. Cuando subis la aplicacin a Google Play poner un enlace por aqui para que le echemos un
vistazo,
Hola, a partir de este ejemplo he intentado hacer pruebas para manejar una base de datos. Mi problema es el
siguiente: Una vez hago una busqueda en la BD, muestro en un listview los campos y utilizo un
setOnItemClickListener para pasar a la siguiente lista que corresponde con otra busqueda en la BD segun el
criterio pasado.
En cada actividad realizo los metodos onStart y onStop, la aplicacion funciona sin errores pero en el Logcat
salen errores de que no se cierra el Cursor (Finalizing a Cursor that has not been deactivated or closed.) No
sale inmediatamente sino con un poco de retraso.
Que puedo hacer para solucionarlo?
Gracias
Un saludo
Hola como estn?
Como haba comentado anteriormente, mi aplicacin en el emulador me funciona a la perfeccin llamando los
datos de mi BD, pero cuando creo el .apk no me instala el archivo de BD en el dispositivo.
Mis permisos son los siguientes en el Manifest :
Si alguien por favor se ha encontrado con esto me hacen saber.
Muchsimas gracias!!!
A mi est pasando lo mismo. Me funciona bien en el emulador de android, pero al pasarlo a la tablet, no
hay forma de que funcione, por favor q permisos hay q tener??
he puesto, el de WRITE.EXTERNAL_STORAGE, READ.EXTERNAL_STORAGE,
PERSISTENT_ACTIVITY, nose cual mas probar.GARCIAS.
He aplicado este algoritmo, pero no se si he identificado que las bases de datos se creen, ademas como puedo
saber si verdaderamente se crearon las bases de datos, tengo unas bases de datos que pesa cada una 5 mb
tendra algn problema Gracias
Hola,muchas gracias por el ejemplo es un de los mas entendibles
una pregunta
al crear la base de datos de esta manera los metodos
Miguel S. Mendoza
26 noviembre 2012 11:45pm
RESPONDER CITAR
Androide noob
27 noviembre 2012 4:16pm
RESPONDER CITAR
AngelH
12 diciembre 2012 9:43pm
RESPONDER CITAR
susi28
1 abril 2013 11:53am
RESPONDER CITAR
Danny Alexader Trujillo
8 f ebrero 2013 6:17am
RESPONDER CITAR
eduardo
26 marzo 2013 10:47pm
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 10/13
oncreate y onupgrade no se utilizan?
y la base de datos se copian cuando inicia la aplicacin o
cuando se llama al void createDataBase()
estoy aprendiendo android y tenga varias dudas
gracias
me pasa lo mismo. En el emulador va bien, en el tablet no funciuona. No me crea la tabla pq el error que me da
es que no encuentra la table. Que permisos hacen falta o que otra causa puede haber?
gracias
buenas muy buen tuto me ha venido de lujo.
una cosa cuando haces en la bd metadata locale es_ES se puede aadir mas idiomas a la BD? y de ser asi
como se hace y como se meten y recojen datos de esta forma?? la verdad es que necesito tener una base de
datos igual pero que si el idioma de la app es ingles use la BD en ingles y si es en castellano pos la que le
corresponde en fin gracias por todo.
Excelente aporte me est sirviendo mucho para practicar. Solo para complementar, como puedo agregar la
funcionalidad de un spinner en el dialog, por ejemplo si quisiera marcar al cliente como Familia, Amigo,
compaero de trabajo, etc. 1000 Gracias
Olvdate de hacer el archivo manejador de las bases de datos esta aplicacin que lo hace todo por vosotros!!
https://play.google.com/store/apps/details?id=com.pixelsanz.dbcoder&feature=search_result#?
t=W251bGwsMSwyLDEsImNvbS5waXhlbHNhbnouZGJjb2RlciJd
Che solo tengo un problema al Momento de Poner el return db.insert En Los metodos De insertar modificar y
eliminar Alarmas me Marca Error Y No Me Reconoce El db Sabes que Podr ser
db es una referencia a SQLiteDatabase. La tienes que hacer en el cuerpo principal de la clase.
SQLiteDatabase db;
Felipe Hernandez Palafox :
Hola buenos das, no es necesario que en el manifest este registrado solo es que crees la clase
haciendo herencia de class tunombreclase extends SQLiteOpenHelper {}
en el manifest solo debes de tener permisos como esto
alejandro
10 abril 2013 11:09am
RESPONDER CITAR
ekaitz
10 abril 2013 1:52pm
RESPONDER CITAR
Akira
23 abril 2013 12:41am
RESPONDER CITAR
Javi
4 mayo 2013 5:51pm
RESPONDER CITAR
jillv
31 mayo 2013 7:23pm
RESPONDER CITAR
Julius56
23 junio 2013 6:51pm
RESPONDER CITAR
Felipe Hernandez Palafox
17 junio 2013 4:30pm
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 11/13
Hola buenas noches, por favor quisiera saber como edito. sqlite editor en mi motorola que esta con el sistema
de estados unidos. Ya que aqui en per no funciona. Muchas gracias
Echa un vistazo a una herramienta gratuita Valentina Studio. Producto asombroso! OMI es el mejor gestor de
SQLite para todas las plataformas. http://www.valentina-db.com/en/valentina-studio-overview
Hola a todos a ver si alguien puede aclararme un poco, porque estoy hecho un lo. He empezado hace poco a
programar y me he metido en el mundo Android. Llevo varios das desarrollando una aplicacin y quiero que
esta consulte una base de datos con 500 nombres que meto yo. Mi duda es, tengo que meter a la fuerza un
sqlite y poner los nombres con cdigo? puedo crear la BD en excel o Access y despus pasarla a un formato
que lea android? Estoy un poco perdido porque todo lo referente a sqlite habla de como construir la base de
datos desde android pero no se como crearla fuera con un programa visual y luego introducirla en el programa.
Un saludo y gracias
Para que sirven las alarmas, soy uevo en esto, y he entendido todo.pero lo que no entiendo que sentido o roll
juegan las alarmas en las bases de datos, por favor si fueran muy amabls de aclarame el asundo o un link
donde indique ese tema..de antemano gracias
Alarma es un ejemplo, como el que dice caramelos, coches o cualquier cosa. Si te fijas, es una de las
columnas de la tabla.
No entiendo porque llama a BD=new DBAdapter(this); Qu es DBAdapter?Donde se define? En el ejemplo
descargable existe esa clase, pero en el que aparece en esta pgina no y por ms que pruebo a cambiar nada
funciona.
Hola
Tienes algun ejemplo de una base de datos sqlite relacional con la menos dos o tres tablas?
Consutla mirando el codigo netrunners creas un servico para hacer las tareas de insert, update, etc. Porque
razn utilizas un servicio. O se que se gana o se pierde.
Muy buen tutorial, una preguntaEn tu ejemplo solo tienes una tabla, supongo que para ms tablas solo debo
Juan Carlos Pasache Anticona
28 julio 2013 10:12am
RESPONDER CITAR
DENIS
7 septiembre 2013 9:32am
RESPONDER CITAR
Gabriel
4 octubre 2013 7:47pm
RESPONDER CITAR
Willian
14 octubre 2013 6:29am
RESPONDER CITAR
Gabriel
14 octubre 2013 10:06am
RESPONDER CITAR
Gabriel
14 octubre 2013 10:13am
RESPONDER CITAR
Jean
23 octubre 2013 5:18pm
RESPONDER CITAR
Luis
25 octubre 2013 8:35pm
RESPONDER CITAR
Yeshua
5 noviembre 2013 5:21pm
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 12/13
repetir el procedimiento para cada una, o me equivoco? por otro lado me sale error en DATABASE_TABLE
porque como tengo varias tablas en la db que importe no se como distinguirlas. Gracias
Gracias por tu aporte, he seguido tu ejemplo para adecuarlo a mi aplicacion, pero cdo se copia la base de datos
en la ruta por defecto de las bases de datos en el sistema Android y hago la consulta pertinente me dice que no
encuentra la tabla que cree con anterioridad, si consulto por el plugins de SQLite para eclipse, ciertamente la
tabla que debo consultar no se encuentra, agredecido de tu opinion
Cuando rescatas el valor de una variable de otra tabla; esta se ve con su _id.
La pregunta es: Como y dnde puedo hacer que esa _id se relacione con ejemplo su nombre, o si hay un
mtodo ms sencillo donde pueda asignarle un valor String al resultado de cada _id.
Hola muy buen tutorial ayuda bastante solo quiero dar una informacin relevante y que a mi me causo
muchos conflictos en la linea 10 de el paso no. 4 inicias tu DB con DBAdapter(); esto se debe cambiar por el
nombre de la clase que has creado para hacer la conexin, que en este ejemplo es DBHelper();, supongo que
no es importancia pero a mi me creo muchos conflictos.
Sobre lo dems no me queda ninguna duda todo excelente muchas gracias de verdad
Hola un favor, yo tengo una base de datos sqlite ya hecha y necesito llamar a cada registro desde java android
de manera aleatoria.
pero nose como llamar una tabla externa ya llena de datos desde java android, podrias ayudarme x favor??
Solo un consejo en el metodo checkDataBase cambia la linea
return checkDB != null ? true : false;
por
return checkDB != null;
Hace exactamente lo mismo pero es mas entendible.
NOMBRE ( necesario )
CORREO ELECTRONICO ( necesario ) - no sera publicado -
WEB
Rodolfo
21 noviembre 2013 4:16pm
RESPONDER CITAR
Omar
25 noviembre 2013 5:48pm
RESPONDER CITAR
Jrgen
27 f ebrero 2014 10:46pm
RESPONDER CITAR
Liz
4 abril 2014 1:54am
RESPONDER CITAR
Alejandro
15 abril 2014 3:48pm
RESPONDER CITAR
29/5/2014 Usar nuestra propia Base de Datos SQLite en Android | NetRunners
http://blog.netrunners.es/usar-nuestra-propia-base-de-datos-sqlite-en-android/ 13/13
Feria de Albacete 2011 Desarrollo de listas en Android
Enviar comentario
Copyright 2008-2013 NetRunners Powered by WordPress