Inicio Android Bases de Datos en Android (I): Primeros pasos

Bases de Datos en Android (I): Primeros pasos

por sgoliver

En los siguientes artículos de este tutorial de programación Android, nos vamos a detener en describir las distintas opciones de acceso a datos que proporciona la plataforma y en cómo podemos realizar las tareas más habituales dentro de este apartado.

La plataforma Android proporciona dos herramientas pricipales para el almacenamiento y consulta de datos estructurados:

  • Bases de Datos SQLite
  • Content Providers

En estos próximos artículos nos centraremos en la primera opción, SQLite, que abarcará todas las tareas relacionadas con el almacenamiento de los datos propios de nuestra aplicación. El segundo de los mecanismos, los Content Providers, que trataremos más adelante, nos facilitarán la tarea de hacer visibles esos datos a otras aplicaciones y, de forma recíproca, de permitir la consulta de datos publicados por terceros desde nuestra aplicación.

SQLite es un motor de bases de datos muy popular en la actualidad por ofrecer características tan interesantes como su pequeño tamaño, no necesitar servidor, precisar poca configuración, ser transaccional y por supuesto ser de código libre.

Android incorpora de serie todas las herramientas necesarias para la creación y gestión de bases de datos SQLite, y entre ellas una completa API para llevar a cabo de manera sencilla todas las tareas necesarias. Sin embargo, en este primer artículo sobre bases de datos en Android no vamos a entrar en mucho detalle con esta API. Por el momento nos limitaremos a ver el código necesario para crear una base de datos, insertaremos algún dato de prueba, y veremos cómo podemos comprobar que todo funciona correctamente.

En Android, la forma típica para crear, actualizar, y conectar con una base de datos SQLite será a través de una clase auxiliar llamada SQLiteOpenHelper, o para ser más exactos, de una clase propia que derive de ella y que debemos personalizar para adaptarnos a las necesidades concretas de nuestra aplicación.

La clase SQLiteOpenHelper tiene tan sólo un constructor, que normalmente no necesitaremos sobrescribir, y dos métodos abstractos, onCreate() y onUpgrade(), que deberemos personalizar con el código necesario para crear nuestra base de datos y para actualizar su estructura respectivamente.

Como ejemplo, nosotros vamos a crear una base de datos muy sencilla llamada BDUsuarios, con una sóla tabla llamada Usuarios que contendrá sólo dos campos: nombre e email. Para ellos, vamos a crear una clase derivada de SQLiteOpenHelper que llamaremos UsuariosSQLiteHelper, donde sobrescribiremos los métodos onCreate() y onUpgrade() para adaptarlos a la estructura de datos indicada:

package net.sgoliver.android.bd;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class UsuariosSQLiteHelper extends SQLiteOpenHelper {

	//Sentencia SQL para crear la tabla de Usuarios
	String sqlCreate = "CREATE TABLE Usuarios (codigo INTEGER, nombre TEXT)";

	public UsuariosSQLiteHelper(Context contexto, String nombre,
                               CursorFactory factory, int version) {
		super(contexto, nombre, factory, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		//Se ejecuta la sentencia SQL de creación de la tabla
		db.execSQL(sqlCreate);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int versionAnterior, int versionNueva) {
		//NOTA: Por simplicidad del ejemplo aquí utilizamos directamente la opción de
		//      eliminar la tabla anterior y crearla de nuevo vacía con el nuevo formato.
		//      Sin embargo lo normal será que haya que migrar datos de la tabla antigua
		//      a la nueva, por lo que este método debería ser más elaborado.

		//Se elimina la versión anterior de la tabla
		db.execSQL("DROP TABLE IF EXISTS Usuarios");

		//Se crea la nueva versión de la tabla
		db.execSQL(sqlCreate);
	}
}

Lo primero que hacemos es definir una variable llamado sqlCreate donde almacenamos la sentencia SQL para crear una tabla llamada Usuarios con los campos alfanuméricos nombre e email. NOTA: No es objetivo de este tutorial describir la sintaxis del lenguaje SQL ni las particularidades del motor de base de datos SQLite, por lo que no entraré a describir las sentencias SQL utilizadas. Para más información sobre SQLite puedes consultar la documentación oficial o empezar por leer una pequeña introducción que hice en este mismo blog cuando traté el tema de utilizar SQLite desde aplicaciones .NET

El método onCreate() será ejecutado automáticamente por nuestra clase UsuariosDBHelper cuando sea necesaria la creación de la base de datos, es decir, cuando aún no exista. Las tareas típicas que deben hacerse en este método serán la creación de todas las tablas necesarias y la inserción de los datos iniciales si son necesarios. En nuestro caso, sólo vamos a crear la tabla Usuarios descrita anteriomente. Para la creación de la tabla utilizaremos la sentencia SQL ya definida y la ejecutaremos contra la base de datos utilizando el método más sencillo de los disponibles en la API de SQLite proporcionada por Android, llamado execSQL(). Este método se limita a ejecutar directamente el código SQL que le pasemos como parámetro.

Por su parte, el método onUpgrade() se lanzará automáticamente cuando sea necesaria una actualización de la estructura de la base de datos o una conversión de los datos. Un ejemplo práctico: imaginemos que publicamos una aplicación que utiliza una tabla con los campos usuario e email (llamémoslo versión 1 de la base de datos). Más adelante, ampliamos la funcionalidad de nuestra aplicación y necesitamos que la tabla también incluya un campo adicional como por ejemplo con la edad del usuario (versión 2 de nuestra base de datos). Pues bien, para que todo funcione correctamente, la primera vez que ejecutemos la versión ampliada de la aplicación necesitaremos modificar la estructura de la tabla Usuarios para añadir el nuevo campo edad. Pues este tipo de cosas son las que se encargará de hacer automáticamente el método onUpgrade() cuando intentemos abrir una versión concreta de la base de datos que aún no exista. Para ello, como parámetros recibe la versión actual de la base de datos en el sistema, y la nueva versión a la que se quiere convertir. En función de esta pareja de datos necesitaremos realizar unas acciones u otras. En nuestro caso de ejemplo optamos por la opción más sencilla: borrar la tabla actual y volver a crearla con la nueva estructura, pero como se indica en los comentarios del código, lo habitual será que necesitemos algo más de lógica para convertir la base de datos de una versión a otra y por supuesto para conservar los datos registrados hasta el momento.

Una vez definida nuestra clase helper, la apertura de la base de datos desde nuestra aplicación resulta ser algo de lo más sencillo. Lo primero será crear un objeto de la clase UsuariosSQLiteHelper al que pasaremos el contexto de la aplicación (en el ejemplo una referencia a la actividad principal), el nombre de la base de datos, un objeto CursorFactory que típicamente no será necesario (en ese caso pasaremos el valor null), y por último la versión de la base de datos que necesitamos. La simple creación de este objeto puede tener varios efectos:

  • Si la base de datos ya existe y su versión actual coincide con la solicitada simplemente se realizará la conexión con ella.
  • Si la base de datos existe pero su versión actual es anterior a la solicitada, se llamará automáticamente al método onUpgrade() para convertir la base de datos a la nueva versión y se conectará con la base de datos convertida.
  • Si la base de datos no existe, se llamará automáticamente al método onCreate() para crearla y se conectará con la base de datos creada.

Una vez tenemos una referencia al objeto UsuariosSQLiteHelper, llamaremos a su método getReadableDatabase() o getWritableDatabase() para obtener una referencia a la base de datos, dependiendo si sólo necesitamos consultar los datos o también necesitamos realizar modificaciones, respectivamente.

Ahora que ya hemos conseguido una referencia a la base de datos (objeto de tipo SQLiteDatabase) ya podemos realizar todas las acciones que queramos sobre ella. Para nuestro ejemplo nos limitaremos a insertar 5 registros de prueba, utilizando para ello el método ya comentado execSQL() con las sentencias INSERT correspondientes. Por último cerramos la conexión con la base de datos llamando al método close().

package net.sgoliver.android.bd;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class AndroidBaseDatos extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //Abrimos la base de datos 'DBUsuarios' en modo escritura
        UsuariosSQLiteHelper usdbh =
        	new UsuariosSQLiteHelper(this, "DBUsuarios", null, 1);

        SQLiteDatabase db = usdbh.getWritableDatabase();

        //Si hemos abierto correctamente la base de datos
        if(db != null)
        {
        	//Insertamos 5 usuarios de ejemplo
        	for(int i=1; i<=5; i++)
        	{
        		//Generamos los datos
        		int codigo = i;
        		String nombre = "Usuario" + i;

        		//Insertamos los datos en la tabla Usuarios
        		db.execSQL("INSERT INTO Usuarios (codigo, nombre) " +
        			       "VALUES (" + codigo + ", '" + nombre +"')");
        	}

        	//Cerramos la base de datos
        	db.close();
        }
    }
}

Vale, ¿y ahora qué? ¿dónde está la base de datos que acabamos de crear? ¿cómo podemos comprobar que todo ha ido bien y que los registros se han insertado correctamente? Vayamos por partes.

En primer lugar veamos dónde se ha creado nuestra base de datos. Todas las bases de datos SQLite creadas por aplicaciones Android utilizando este método se almacenan en la memoria del teléfono en un fichero con el mismo nombre de la base de datos situado en una ruta que sigue el siguiente patrón:

/data/data/paquete.java.de.la.aplicacion/databases/nombre_base_datos

En el caso de nuestro ejemplo, la base de datos se almacenaría por tanto en la ruta siguiente:

/data/data/net.sgoliver.android.bd/databases/DBUsuarios

Para comprobar esto podemos hacer lo siguiente. Una vez ejecutada por primera vez desde Eclipse la aplicación de ejemplo sobre el emulador de Android (y por supuesto antes de cerrarlo) podemos ir a la perspectiva «DDMS» (Dalvik Debug Monitor Server) de Eclipse y en la solapa «File Explorer» podremos acceder al sistema de archivos del emulador, donde podremos buscar la ruta indicada de la base de datos. Podemos ver esto en la siguiente imagen (click para ampliar):

ddms_fileexplorer_database

Con esto ya comprobamos al menos que el fichero de nuestra base de datos se ha creado en la ruta correcta. Ya sólo nos queda comprobar que tanto las tablas creadas como los datos insertados también se han incluido correctamente en la base de datos. Para ello podemos recurrir a dos posibles métodos:

  1. Trasnferir la base de datos a nuestro PC y consultarla con cualquier administrador de bases de datos SQLite.
  2. Acceder directamente a la consola de comandos del emulador de Android y utilizar los comandos existentes para acceder y consultar la base de datos SQLite.

El primero de los métodos es sencillo. El fichero de la base de datos podemos transferirlo a nuestro PC utilizando el botón de descarga situado en la esquina superior derecha del explorador de archivos (remarcado en rojo en la imagen anterior). Junto a este botón aparecen otros dos para hacer la operación contraria (copiar un fichero local al sistema de archivos del emulador) y para eliminar ficheros del emulador. Una vez descargado el fichero a nuestro sistema local, podemos utilizar cualquier administrador de SQLite para abrir y consultar la base de datos, por ejemplo SQLite Administrator (freeware).

El segundo método utiliza una estrategia diferente. En vez de descargar la base de datos a nuestro sistema local, somos nosotros los que accedemos de forma remota al emulador a través de su consola de comandos (shell). Para ello, con el emulador de Android aún abierto, debemos abrir una consola de MS-DOS y utilizar la utilidad adb.exe (Android Debug Bridge) situada en la carpeta platform-tools del SDK de Android (en mi caso: c:\Users\Salvador\AppData\Local\Android\android-sdk\platform-tools\). En primer lugar consultaremos los identificadores de todos los emuladores en ejecución mediante el comando «adb devices«. Esto nos debe devolver una única instancia si sólo tenemos un emulador abierto, que en mi caso particular se llama «emulator-5554«.

Tras conocer el identificador de nuestro emulador, vamos a acceder a su shell mediante el comando «adb -s identificador-del-emulador shell«. Una vez conectados, ya podemos acceder a nuestra base de datos utilizando el comando sqlite3 pasándole la ruta del fichero, para nuestro ejemplo «sqlite3 /data/data/net.sgoliver.android.bd/databases/DBUsuarios«. Si todo ha ido bien, debe aparecernos el prompt de SQLite «sqlite>«, lo que nos indicará que ya podemos escribir las consultas SQL necesarias sobre nuestra base de datos. Nosotros vamos a comprobar que existe la tabla Usuarios y que se han insertado los cinco registros de ejemplo. Para ello haremos la siguiente consulta: «SELECT * FROM Usuarios;«. Si todo es correcto esta instrucción debe devolvernos los cinco usuarios existentes en la tabla. En la imagen siguiente se muestra todo el proceso descrito (click para ampliar):

android_adb_shell_sqlite

Con esto ya hemos comprobado que nuestra base de datos se ha creado correctamente, que se han insertado todos los registros de ejemplo y que todo funciona según se espera.

Puedes consultar y/o descargar el código completo de los ejemplos desarrollados en este artículo accediendo a la página del curso en GitHub.

En los siguientes artículos comentaremos las distintas posibilidades que tenemos a la hora de manipular los datos de la base de datos (insertar, eliminar y modificar datos) y cómo podemos realizar consultas sobre los mismos, ya que [como siempre] tendremos varias opciones disponibles.

Curso de Programación Android en PDF

Este curso también está disponible en PDF. Descubre cómo conseguirlo…

¿Te ha sido de utilidad el Curso de Programación Android? ¿Quieres colaborar de forma económica con el proyecto? Puedes contribuir con cualquier cantidad, unos céntimos, unos euros, cualquier aportación será bienvenida. Además, si tu aportación es superior a una pequeña cantidad simbólica recibirás como agradecimiento un documento con la última versión del curso disponible en formato PDF. Sea como sea, muchas gracias por colaborar!

Más información:

También te puede interesar

60 comentarios

Desarrollo en Android | sgoliver.net blog 31/01/2011 - 12:01

[…] Bases de datos en Android (I): Primeros pasos con SQLite […]

Responder
Bases de Datos en Android (II): Insertar/Actualizar/Eliminar | sgoliver.net blog 03/02/2011 - 12:19

[…] el artículo anterior del curso de programación en Android vimos cómo crear una base de datos para utilizarla desde […]

Responder
Chechu 03/02/2011 - 12:36

Muy buen tutorial! Todo muy claro y bien explicado, no encontraba ningun sitio que explicara cómo ver la base de datos creada. Saludos

Responder
Ignacio 04/02/2011 - 19:12

Muy buen tutorial, estoy empezando en la programación para android y justamente me surgia la duda de manejo de datos

se agradece

Responder
Droide 05/02/2011 - 21:06

Como podría crear una base de datos desde mi pc y luego pasarla directamente a la aplicación?

Trabajo con mysql y tengo un servidor local para aplicaciones web, y la idea es pasar una base de datos de mysql a mi aplicación android, ¿cómo lo hago?

Responder
Chechu 07/02/2011 - 13:27

yo he probado con el emulador en ejecucion, exportas la base de datos que estes usando como pone en el tutorial, la modificas con el sqlite administrator y despues la vuelves a importar, todo ello con el emulador de android activo. al iniciar una nueva ejecucion del programa android tendras la base de datos modificada. supongo que habra algun modo mejor de hacerlo, pero bueno este funciona…

Responder
luis 10/05/2011 - 18:04

Muy buen tutorial. es justo lo que necesitaba para aprender y funciona perfecto.

saludos…

Responder
William Velandia 16/05/2011 - 18:13

He comenzado a trabajar con Android y lo felicito por estos tutoriales son estupendos. Mi duda es como se puede hacer para crear la base de datos en la SD del Celular pues encontre un tutorial con esta instrucción SQLiteDatabase.openDatabase(«/sdcard/DBUsuarios.db», null, SQLiteDatabase.OPEN_READWRITE + SQLiteDatabase.CREATE_IF_NECESSARY);
Le antepuse la instruccion /sdcard/ antes del nombre de la base de datos y me saca un error. gracias…

Responder
Antonio 17/05/2011 - 16:59

Hola!

Enhorabuena por el trabajo realizado. Me ha sido muy util, pero me he encontrado con el siguiente problema.

He creado una base de datos desde una app tal como explicais en el tutorial. Al ejecutarla sobre el emulador, la aplicación funciona perfectamente (puedo hacer consultas a la base de datos perfectamente)

El problema surge cuando instalo dicha aplicacion en un terminal. Tras instalarla y ejecutar la app, me devuelve la siguiente excepcion SQLException

no such table: nombre_tabla: , while compiling: select * ….

Teneis la solucion a este problema?

Muchas gracias.

Un slaudo

Responder
Adolfo 26/05/2011 - 9:34

A mi me queda una duda, donde se crea la base de datos exactamente? esque en el codigo no lo veo por ningun lado.
gracias por el tutorial
un saludo

Responder
Marcelo 08/07/2011 - 20:41

Gracias por tutorial, esta buenísimo, pero les comento que la primera vez funcionó todo bien, pero cunado borre la base en el DDMS, ya no la volvió a crear, intente cambiándole de nombre y me crea un archivo que con el nombre de la base pero no lo puedo leer, y la aplicación termina. Intente copiar ese archivo y me sale «Failed to pull selection» o al intentar copiar una base que ya tenía sale «Failed to push the item(s)». Haber si alguien me puede ayudar.
Un saludos.

Responder
jmrlegido 08/09/2011 - 8:26

Genial. Perfectamente explicado y todo funciona a la primera.
Muchísimas gracias.

Responder
Ficheros en Android (I): Memoria Interna | sgoliver.net blog 21/11/2011 - 20:10

[…] datos en nuestras aplicaciones, como por ejemplo los ficheros de preferencias compartidas o las bases de datos SQLite. Estos mecanismos son perfectos para almacenar datos estructurados, pero en ocasiones nos seguirá […]

Responder
Darry Castro 17/02/2012 - 21:29

tendran el zip. por hay..?

Responder
Luz 06/03/2012 - 0:07

Hola, me ha servido mucho este tutoria =).

Como podria descargar mi base de datos en MySQL a mi aplicacion Android y asi vaciarla en la BD de SQLite???

Si me pudieras ayudar te lo agradeceria muchisimo =)

Responder
Nano 13/03/2012 - 22:03

Gracias por el tutorial!.

Responder
francisco javier 16/03/2012 - 16:11

cual es el tamaño maximo que puede tener una base de datos en sqlite

Responder
Sergio 28/03/2012 - 17:49

Hola, me parece genial tu blog. ya lo he visitado en varias ocasiones. Tengo una duda que me desconcierta. Cuando instalo la aplicación en el emulador me crea la base de datos vacía, no me mete las tablas.

En onCreate(SQLiteDatabase db) no he puesto ninguna sentencia CREATE ni nada, pero es que hice otra aplicación «EatTool», y no tengo en ningún sitio nada de CREATE TABLE, y en la instalación me copia la base de datos que he diseñado en eclipse.

Me estoy volviendo loco en saber la razón por la que en un programa me copia la BD con sus tablas y en otra la BD sin tablas…

Sabes cuál es el error?

gracias!

Responder
Omar 27/04/2012 - 18:30

Muchas gracia por el tut es de lo mejor, me estoy iniciando en esto de android y de verdad toda esta info me ha ido muy bien. Te agradesco mucho. EXELENT

Responder
Pablo 18/06/2012 - 23:40

Para acceder a la base de datos SQLite desde una actividad tengo que crear un objeto creado por mi que herede de SQLiteOpenHelper.

Si tengo 5 actividades seguidas y en cada una de ellas tengo que acceder a la base de datos debo crear 5 objetos SQLiteOpenHelper?

No hay manera de crear un objeto SQLiteOpenHelper y rehutilizarlo en el resto de actividades en vez de crear 5 objetos??

Gracias y un saludo

Responder
Jesús Alberto 11/09/2012 - 15:33

Hola, muy buena info, me sirvio de mucho :D
Por cierto! en la Play Store hay algunas aplicaciones que pueden servir
para checar las BD desde la misma Terminal :D
Esta SQLite Manager :D o SQLite Editor :)
Gracias por proporcionar esta información, Saludos.

Responder
ChUsMa 18/10/2012 - 21:21

Tremendo documento, me encanta. Me ha ayudado muchisimo. Gracias!

Responder
Eje 28/10/2012 - 21:00

Muy buenos artículos.
He conseguido hacer funcionar mi primera aplicación en Android y esta tiene acceso a un SQLite (llevo años trabajando con BDs o sea que no tengo problema con ellas).
Mi problema es que ahora estoy intentando organizar y optimizar el código separando toda la lógica de la BD en una clase creada por mí para ese uso y consigo que funcione todo en la clase salvo lo más básico: la apertura de la BD.
Para ello utilizo un objeto SQLiteDatabase y abro la conexión con la función: openOrCreateDatabase(nombreBD, MODE_WORLD_WRITEABLE, null).
Cuando ejecuto eso desde uno de los activities funciona perfectamente, pero si me llevo el código a la clase propia, me da 2 errores: uno porque no reconoce la constante MODE_WORLD_WRITEABLE y otro porque no reconoce la función openOrCreateDatabase.
Supongo que será porque le falta algún import que es el que contiene esas definiciones, pero he probado a añadirle a la clase todos los import que tiene alguno de los activities donde funciona la instrucción, y sigue dando el mismo error.
De momento tiro haciendo la apertura de la BD en las activities y pasándole el objeto SQLiteDatabase a los métodos de la clase para que trabaje con ella. Funciona perfectamente pero es absurdo hacer algo así cuando lo que pretendo es que la clase haga todo el trabajo con la BD ella misma y que las activities se dediquen a pedirle datos, ignorando todo lo que haya por detrás.
¿Alguna idea de qué estoy pasando por alto?

Responder
admin 29/10/2012 - 9:49

Si consultas la documentación de Android verás que tanto la constante MODE_WORLD_WRITABLE como el método openOrCreateDatabase() pertenecen a la clase Context, de ahí que ambos te funcionen si los utilizas dentro de una Activity (que hereda de Context) y no fuera de ella.

Teniendo esto en cuenta, una solución sencilla sería pasas al constructor de tu clase de acceso a datos una referencia a tu Activity, y llamar al método openOrCreateDatabase() sobre dicha referencia.

Sería algo así:

public class MiActividad extends Activity
{
   private ClaseAccesoDatos cad;
   
   public void onCreate(...)
   {
      cad = new ClaseAccesoDatos(this);

      cad.abrirBaseDatos(...);
   }
}

public class ClaseAccesoDatos
{
   private Context contexto;

   public ClaseAccesoDatos(Context contexto)
   {
      this.contexto = contexto;
   }

   public void abrirBaseDatos(...)
   {
      SqliteDatabase db = 
         contexto.openOrCreateDatabase(
            nombreBD, contexto.MODE_WORLD_WRITEABLE, null);
   }
}

Espero que te sirva.

Responder
Nacho 03/11/2012 - 16:50

Sólo quería agradecerte tanto este como otros tutoriales que has hecho sobre Android, me has ahorrado muchísimos quebraderos de cabeza.

Muchas gracias.

Responder
Anibal Santiago 15/11/2012 - 17:08

muy bueno te felicito , me gustaría ponerte de referencia , si me lo permites

Responder
geek 26/11/2012 - 23:23

el mejor curso de programación en android en castellano.

Responder
Augusto Rojas 25/02/2013 - 6:28

Es la primera vez que entro y realmente esta muy interesante, felicitaciones.

Augusto Rojas
Lima-Peru

Responder
rafael 13/03/2013 - 20:20

Que tal. Felicidades por tu tutorial, me sirvio bastante para introducirme al desarrollo en android. Actualmente he desarrollado una aplicacion tipo encuesta en la cual se van recabando datos a trabes de una tabla en sqlite. Ya he logrado hacer un ABC desde el dispositivo, Ahora mi pregunta es si es que tu supieras algo al respecto, es posible generar una funcion a la aplicacion que me exporte la( s ) tablas y se sincronicen en la PC ya sea SQL Server o MySQL?

Responder
Julius 56 20/03/2013 - 18:56

Muy bueno el tutorial. Es una ayuda inestimable.
El tiempo que me he ahorrado bien vale una buena donación.
Saludos y muchas gracias.

Responder
jose 07/04/2013 - 2:47

Hola a todos, necesito ayuda para sincronizar datos desde sqlite a mysql, me explico. suponiendo que tengo una aplicación corriendo en un android y que esta aplicación almacene los datos correspondiente en sqlite y mediante alguna opción que envíe los datos recopilado en sqlite a mysql que se encuentra en un servidor dedicado.

Responder
Johan Quijano 08/04/2013 - 18:11

Saludos,

Perdón la ignorancia pero tengo entendido que al ejecutar ese onUpgrade del ejemplo, se borra TODA la tabla y luego se vuelve a crear?

Si yo tengo datos, eso no estaría mal hecho?

Sería bueno usar un ALTER TABLE en vez de borrar y crear.

Saludos, gracias por su excelente guía.

Responder
Eduardo 09/04/2013 - 0:21

Muy bueno de verdad, gracias por el aporte.

Un saludo!

Responder
Preferencias en Android I: Shared Preferences | sgoliver.net blog 21/06/2013 - 8:57

[…] ya uno de los métodos disponibles en la plataforma Android para almacenar datos, como son las bases de datos SQLite. Las preferencias de una aplicación se podrían almacenar por su puesto utilizando este método, y […]

Responder
carloshc87 04/09/2013 - 4:55

Muchas gracias por el tutorial, muy bueno y útil.

Me queda una duda. Veo que no pusiste el db.Close() para cerrar la conexión con la base de datos. Es esto correcto? Cuando en mi caso agrego esa línea al final del método onCreate(), al hacer clic en cualquier de los botones se cae la aplicación, pero no entiendo por qué.

Otra consulta. Veo que al crear la tabla, se indicó que el código sería del tipo INTEGER. Sin embargo, cuando se agregan los valores al ContentValues se agrega el código como String. De todas formas, al ejecutar la aplicación se crean y modifican los registros correctamente. Es correcto manejar en el ContentValues Strings de forma independiente al tipo de datos que tengan las columnas en la tabla? Esto lo maneja automáticamente Android haciendo los cambios de tipos de datos automáticamente?

Muchas gracias, tiene un gran valor para mi este tutorial.

saludos

Responder
Víctor 07/09/2013 - 10:41

Lo primero felicitarte por la web, me ha sorprendido gratamente tanto la extensión de temas que se tocan como la calidad de los mismos.

Supongo que por tu experiencia podrás aconsejarme en lo siguiente:

Es una aplicación que va a hacer un uso continuo de la base de datos, ya sea para lecturas o escrituras en la misma desde distintos activitys, mi pregunta es: recomiendas abrir y cerrar en cada uso o bien declarar el Helper como static y public para que desde cualquier activity pueda invocarlo. Lo comento por rendimiento de abrir y cerrar la bd continuamente. Desde tu punto de vista que aconsejarías.

Un abrazo y de nuevo felicitarte por la labor que realizas

Víctor

Responder
WILFER 25/09/2013 - 19:37

Buenas Tardes Señores
Bueno estoy buscando como hacer mi propio motor de Base de Datos, ya que no veo por que seguir las BD tradicionales, trabajo con SQL, pero veo deficiencias y por eso quiero hacer mi propio motor.
Alguien me puede dar una mano de como comenzar, les adelanto solo guardaría una sola vez el (10) en toda la BD y la información no se pierde, en BD(sql) se guarda n-veces.

Buena Tarde

Responder
Daniel 11/10/2013 - 0:16

Hola, una pregunta: cuando insertas los datos en

db.execSQL(«INSERT INTO Usuarios (codigo, nombre) » +
«VALUES (» + codigo + «, ‘» + nombre +»‘)»);

¿cuál es la razón de usar comillas dobles dentro de comillas sencillas (‘» + nombre +»‘)?

Estuve leyendo la documentación oficial, pero no encontré nada específico al respecto. Creo que se nota que soy novato en las BD’s, y si mi pregunta es muy tonta, espero que al menos alguien pueda decirme en qué parte de la documentación viene este tema o qué libro o página web puedo consultar.

Saludos

Responder
daniel 02/11/2013 - 4:49

sera que puedes implementar guardar una imagen en la base de datos
gracias me ayudaría mucho

Responder
Jorge 05/11/2013 - 19:54

Corrí la aplicación en mi Android, pero no puedo ver la base de datos creada, busque en la carpeta data/data de la memoria interna del telefono y nada.

Alguien me puede indicar si debo de rootear el telefono, o por qué no puede ver la base de datos.
Gracias..

Responder
Alejo 08/11/2013 - 13:49

Muy buen tutorial. Gran trabajo el que haces con estos tutoriales.

Muchas gracias

Responder
pablo 03/01/2014 - 23:41

Saludos.
Tengo un problema con:

setContentView(R.layout.main);

me sale que main no puede ser resuelto o no es un campo, trate de usar las opciones que me da eclipse para modificar pero esas clases no se dejan modificar.
como podria hacer para no tener este problema.
muchas gracias de antemano.

Responder
SBL 08/01/2014 - 15:20

Hola, muchas gracias por el tutorial. Tengo una BD en un huawei U8110 pero no me permite acceder a la BD a través del DDMS, al parecer no reconoce el dispositivo (aparece algo como ?????? Offline unknown), he consultado en muchos foros y no he podido solucionarlo aún. Alguna idea?. De antemano, muchas gracias.

Responder
Eduardo Moreno 28/01/2014 - 5:20

Me parece excelente

Responder
Juanen 12/02/2014 - 15:49

Lo primero es darte la enhorabuena por el tutorial (tengo también el pdf)

¿Y si queremos usar una base da datos que hemos creado fuera de Android?
Yo tengo una base de datos con equipos de futbol (unos 200) agrupados por categorías. Y además una serie de eventos y partidos.

Así que mi BD es compleja y la he creado con SQLite Administrator. ¿Como la paso al programa?

Saludos

Responder
Lau 20/08/2014 - 15:54

Hola, no acabo de entender muy bien el funcionamiento de SQLite.

Por ejemplo, tengo una tabla donde aparecen los nombres de usuario registrados. Estos nombres de usuario tienen que ser únicos.

Mi duda es, que si la tabla se crea cada vez de forma independiente en cada dispositivo, como podría controlar que los nombres de usuarios no se repitan? O SQLite solo se utilizaría, por ejemplo, para las puntuaciones en un juego?

Gracias.

Responder
Sebastian 24/02/2015 - 15:27

se me repiten los datos cada vez que lo ejecuto ayuda

Responder
Pablo 15/03/2015 - 6:50

Tu blog es de gran ayuda. Tu sabes como puedo hacer para insertar en la aplicacion una base de datos ya creada. Por ejemplo tengo una base que tiene 1235 registros y deseo importarla a la aplicacion.
Gracias.-

Responder
jesus 15/03/2015 - 12:47

me gusta mucho la explicacion. Pero tengo un problema y es que no tengo la carpeta ‘databases’ en la ruta: /data/data/nombre_paquete/databases

Por qué puede ser? la tengo que crear yo manualmente? espero que me ayuden porque estoy loco ya intentando solucionarlo.

si alguien le ha pasado mi correo es: jsmlgarcia@gmail.com

gracias de antemano!

Responder
Aldo Gamaliel 05/04/2015 - 1:20

brother una pregunta, viendo el post vi que podias acceder a la shell de el emulador y ejecutar ahi sentancias de sqlite, lo intente en un celular fisico y no me es posible

Responder
Mauricio 02/05/2015 - 4:09

Buen tutorial, pero yo conoci una aplicación que le realizarosn para hacer unas estadisticas, lo bueno de todo es que no requeria internet todo el tiempo, ya que les tocava ir a luares donde la señal no entraba, pero esto no impedía realizar el trabajo, y cuando este celular o table se conectaba al internet ya se directa mente o por wi-fi, este actualizaba la base de dotos del trabjo realizado, y desde otro lugar desde un pc podian ver el trabajo realizado sin contra tiempo, y hacer todas las consultas estadisticas, y estar enterado de lo realido y lo faltante.
Esto donde se puede aprender o como se realiza, quien me da una explición ya que la herramienta es muy buena. Gracias

Responder
Abelardo Astudillo 16/06/2015 - 17:28

hola muy buenos dias tengo una duda yo cuando quiero consultar mi base de datos desde el emulador le doy la ruta donde esta la base de datos y me lanza un mensaje de PERMISSION DENIED como puedo hacer para poder tener esos perimos? muchas gracias!

Responder
Principiante 04/07/2015 - 23:13

public void guardar(Clase nombre) {

final SQLiteDatabase nomEsc = helper.getWritableDatabase();

final ContentValues valores = new ContentValues();
valores.put(«color», nombre.getColor());

try {
nomEsc.insertOrThrow(«nombre», null, valores);
nomEsc.update(«nombre», valores, «id»
+ nombre.getId(), null);
nomEsc.delete(«nombre», «id»,
new String[] { Integer.toString(nombre.getId()) });

} catch …

PUEDO EN UN MISMO METODO INSERTAR, ACTUALIZAR Y ELIMINAR?

Responder
cristian 12/11/2015 - 21:10

no supo como entrar a la consola de la sqlite para revisar los datos
¿como puedo hacerlo ya que el directorio de mi proyecto no me funcionó y no se como obtenerlo?

Responder
Jonathan 01/01/2016 - 16:06

Hola muy buenas.

He seguido todo el tutorial paso a paso y no veo que se cree la base de datos, al principio me fallaba al ejecutar el getWritableDatabase(); e investigando encontre que debia agregar el permiso en el Manifest.xml

Ahora al ejecutar la clase que escribe en la DB no se donde encontrar la base de datos para comprobar que se esta haciendo bien. He mirado el DDMS en data y el directorio me aparece vacio.

Saludos

Responder
Natan Jared Correa 31/03/2016 - 22:01

Saludos

Soy nuevo en esto de programar en android, asi que queria pedir su ayuda. He deseado iniciar con una aplicacion parecida a una biblioteca en el sentido de que tiene una gran variedad de revistas, libros y cosas asi, y que a partir de estos datos realize busquedas por tema, por palabras, o leer directamente una publicacion. Lo que he leido es que la base de datos SQLite no almacena tantos datos, asi que queria preguntarles que puedo hacer en mi caso

Responder
Erick 06/07/2016 - 6:02

nada como insertar actualizar mas rápido

Responder
Oscar VJ 16/08/2016 - 15:58

Hola! Que tal quería saber si alguien tiene algún tutorial para poder sacar un respaldo de la base de datos (sqlite) desde el teléfono para poder agregarlo como característica a una app.

Responder
Manolo_23 22/11/2017 - 18:11

Muy buen tutorial! Todo muy claro y bien explicado, no encontraba ningun sitio que explicara cómo ver la base de datos creada. Saludos

Responder
Jesus Frias 19/11/2020 - 1:02

Hola, te agradezco por la creación de este curso!
Espero que alguien pueda ayudarme a resolver esta situación: Necesito obtener la id del registro recien insertado.
Se me ocurrio algo, «bloquar la base de datos» hasta que cierre mi instancia, de esta manera consultaria el ultimo id enseguida de haberlo ingresado. Habra alguna manera de habilitar dicho bloqueo?

Responder

Responder a Manolo_23

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. Aceptar Más Información

Política de Privacidad y Cookies