Skip to content
Layout Main Activity

Sincronización Android con bbdd externa MySQL: proyecto Agenda de reuniones

En este tutorial vamos a describir un proyecto Android simulando una agenda que gestionará citas y reuniones de trabajo, utilizando un servidor externo MySQL para almacenar los registros.

Desde nuestra App Android podremos gestionar esta agenda, tanto en modo de consulta, viendo la próxima reunión y todas las registradas hasta ese momento, como dando de alta nuevas citas de manera que podamos sincronizar los datos, insertándolos en la base de datos MySQL externa.

Este proyecto lo desarrollaremos con el IDE Eclipse para la API 20 (Android 4.4W,2 KitKat), y en un posterior tutorial, publicaremos el mismo proyecto realizado con Android Studio para la API 21 (Android 5.0 Lollipop).

Como siempre, podrás descargar el código completo del proyecto al final de este tutorial.

Conexión a base de datos MySQL

Antes de entrar a desarrollar el proyecto, hacemos una pequeña introducción donde mostramos los pasos necesarios para poder establecer una conexión con un servidor de base de datos externo MySQL desde una aplicación Android. Se utilizará la versión 5.6 de MySQL.

Pasos necesarios para abrir una conexión con un servidor de datos MySQL (se debe tener un servidor local para las pruebas):
Añadimos la librería ‘mysql-connector-java-5.1.3X-bin.jar‘, para funciones de conexión y las diferentes tareas CRUD (Create-Read-Update-Delete).

Referenciamos con la sentencia «import» las clases java.sql.Connection y java.sql.DriverManager:

Inicializamos la clase Connection encargada de conectar con la base de datos:

Se carga el driver del connector JDBC:

Establecemos la conexión con el Servidor MySQL indicándole como parámetros la url construida,la base de datos a la que vamos a conectarnos, y el usuario y contraseña de acceso al servidor:

Una vez realizados los acceso o cambios a la base de datos, se recomienda cerrar la conexión en cada operación que se realice sobre la base de datos:

Proyecto Android Agenda de reuniones (Sincronización BD)

Como comentamos al inicio, esta aplicación nos servirá de ejemplo para mostrar la conexión y sincronización desde un dispositivo Android con una base de datos externa MySQL.

La App consiste en una agenda para  gestión de reuniones o citas de trabajo, con varias funcionalidades con mostrar en todo momento los datos actualizados de las reuniones pendientes, mostrar la reunión más próxima y el poder insertar nuevas reuniones.

Comenzamos enumerando los elementos necesarios para el desarrollo del proyecto que denominaremos SincronizaciónBD:

  • Clase MainActivity, que hereda de la clase base Activity, dónde se define la lógica de conexión a la base de datos MySQL.
  • Clase Citas, que hereda de la clase base ListActivity, dónde se mostrarán los datos de la conexión realizada, además de mostrar la información almacenada en la base de datos.
  • Clase AdaptadorLista, que hereda de la clase base BaseAdapter, encargado de construir la vista de cada uno de los items que se mostrarán en el componente ListView.
  • Librería ‘mysql-connector-java-5.1.3x-bin.jar‘ para implementar las funcionalidades asociadas a la lectura, escritura o eliminación de una base de datos MySQL.

Estructura del proyecto

Vemos en la siguiente imagen la estructura del proyecto SincronizaciónBD:

Estructura Proyecto Android Agenda Trabajo

Documentación código fuente

Describimos las diferentes clases y ficheros de layout que componen el proyecto, así como las consultas Transact-SQL para la base de datos.

Al final de esta documentación, podrás descargar el código completo del proyecto.

SincronizacionBD/src/com.academiaandroid.sincronizacionbd/MainActivity.java

Main Activity

  • Definimos la clase MainActivity, que hereda de la clase base Activity, declarando los componentes para la lógica de conexión al servidor de base de datos MySQL:
  • Se enlazan los componentes con sus recursos a nivel de layout, en este caso cuatro componentes de tipo EditText:
  • Se crea un método llamado conectarMySQL() , que devolverá un valor booleano, indicando si ha sido posible conectarse a la base de datos, con los parámetros indicados por pantalla:

SincronizacionBD/src/com.academiaandroid.sincronizacionbd/Citas.java

Pantalla App Agenda Trabajo

  • Se define una clase llamada Citas, que hereda de la clase base ListActivity, dónde se mostrarán los registros almacenados en la base de datos MySQL:
  • Se declaran los componentes y clases necesarias para realizar consultas a una base de datos en MySQL:
  • Se enlazan dichos componentes con sus recursos a nivel de layout:
  • Se define un método llamado citasAgenda(), que devolverá un ArrayList de objetos Agenda, dónde se abrirá una conexión al servidor de base de datos, se ejecutará una consulta Transact-SQL, mostrando todos los registros almacenados (a excepción del campo id de la tabla ‘agenda’), para finalmente cerrar las conexiones abiertas:
  • Por último se define un método llamado proximaCita(), que devolverá un Array de Strings, en el que se ejecutará una consulta Transact-SQL, que devolverá la cita más próxima del usuario. Para ello previamente será necesario abrir una conexión al servidor de base de datos:

SincronizacionBD/src/com.academiaandroid.sincronizacionbd/AdaptadorLista.java

  • Se define una clase llamada AdaptadorLista, que hereda de la clase base BaseAdapter:
  • Se declaran las clases necesarias para posteriormente añadirlas como argumentos al constructor:
  • Constructor que será invocado desde el componente ListView (como argumento del método setAdapter()), y que recibe el contexto de la aplicación y los objetos almacenados en un ArrayList:
  • Por último se construye la vista por cada item, sobrescribiendo el método getView (devuelve un objeto de tipo View), a partir del ArrayList recibido y la posición que ocupa:

SincronizacionBD/src/com.academiaandroid.sincronizacionbd/Agenda.java

  • Se define una clase Agenda que permitirá crear nuevos objetos, con los datos de cada registro de la base de datos:

SincronizacionBD/res/layout/activity_main.xml

Layout Main Activity

  • Se define un layout denominado ‘activity_main.xml‘, que mostrará el menú principal para establecer los parámetros de conexión a la base de datos MySQL. Estará formado por cuatro componentes de tipo EditText, que recogerán los datos de la conexión, y un componente de tipo Button para enviar los datos introducidos:

SincronizacionBD/res/layout/activity_citas.xml

Layout Activity citas

  • Se define un layout denominado ‘activity_citas.xml‘, que mostrará los datos de conexión establecidos con la base de datos MySQL. Además se muestran los datos de la reunión más cercana, y del total de citas almacenadas en un componente de tipo ListView. Estará formado por numerosos componentes de tipo TextView, que mostrarán los datos de la conexión, y un componente de tipo Button para refrescar los datos almacenados:

SincronizacionBD/res/layout/activity_adaptadorlista.xml

Layout Activity Adaptor

  • Se define un layout denominado ‘activity_adaptador _lista.xml‘, que construirá la vista de cada item del componente ListView. Se definen tres componentes de tipo TextView para mostrar información de cada fila de un registro:

Consultas Transact-SQL:

Estas son las sentencias SQL necesarias para crear la estructura de Base de datos MySQL que usaremos:

  • Crear base de datos «citas»:
  • Crear tabla «agenda»:
  • Insertar un primer registro:
  • Estructura tabla «agenda»:

Estructura Tabla Agenda

Como se puede apreciar en la imagen, la tabla ‘agenda’, está formada por cinco campos o columnas, dónde además de los campos nombre,apellidos y descripcion (de tipo varchar y no permitiendo valores nulos), se define un campo llamado fecha de tipo DateTime, que almacenará la fecha y hora de una reunión programada. Además, se define un campo llamado id, que será la clave primaria de esta tabla, y que se auto incrementa en uno por cada nuevo registro insertado.

Descarga del código

Download

Esta entrada tiene 12 comentarios

  1. Hola, estoy intentando ejecutar el programa descargado, pero obtengo un error al intentar conectarme a MYSql.
    He creado al base de datos, la tabla y un usuario para ella.
    Tambien he instalado el driver y la librería ‘mysql-connector-java-5.1.3X-bin.jar», pero cuando intento acceder a la base con el programa en Android Studio y el emulador, obtengo el error

    Error al comprobar las credenciales: com.mysql.jdbc.Driver

    Uso Windows 7 64bits, y WAMP para los servidores.
    Que tengo que configurar?

    1. Hola Alberto,

      Prueba a añadir la librería «mysql-connector-java-5.1.31-bin.jar» a través de Build Path > Configure Build Path… (pulsando botón derecho sobre el proyecto). Dentro de la pestaña «Libraries», selecciona la opción «Add External JARs…» e indicar la librería comentada anteriormente (además debe estar seleccionada en la pestaña «Order and Export»).

      No debería volver a salir la excepción que indicas, y en caso de que continúes con problemas, ya se debería a la conexión con la base de datos. En el siguiente enlace hablan de diferentes cambios para solucionar el problema, ya que puede ser debido a varios aspectos: http://datafull.co/p/no-se-puede-conectar-a-mysql-a-traves-del-conector-jdbc-a-traves-de-tomcat-o-externamente

      Esperamos que ésto te ayude a resolver el problema

  2. Hola.
    Alberto, ¿Conseguiste finalmente hacer funcionar la aplicación?.

    Yo me he encontrado el mismo problema, a pesar de importar la librería ‘mysql-connector-java-5.1.3X-bin.jar”, crear la dependencia y incluirla en gradle. Una vez importada la he sincronizado y no me ha dado error. Pero me sigue saliendo el mismo error que a ti, cuando lanzo la APP.

    Luego he revisado con mi servidor externo la configuración de la base de datos, y está todo correcto, los permisos los hemos dado mediante «%». Me lo han comprobado y me dicen que está todo bien.

    El nombre usuario y nombre base de datos es de tipo xxx_nombreusuario y xxx_nombrebasededatos
    El puerto por defecto 3306
    Lo único que el nombre del servidor es un dominio tipo xxxxx.com pues tengo un servidor dedicado y en lugar de una IP pongo el nombre de dominio.

    No se donde puede estar el error, seguiré probando y si detecto el error, lo publico por si a alguien le sirve.

    Sería bueno si se publicara un tutorial de algún método para conexión mediante json y archivo PHP en el servidor a través de un dominio en una base remota externa usando una APP, pero incluyendo paso a paso como solucionar la importación de «org.apache.http.*» pues en la versión de sdk 23 está ya no viene.

    Otro tema muy interesante que sería bueno de tratar en algún tutorial sería el método de conexión llamado «pool» pues según he podido leer, éste permite la conexión de multiples hilos a la base de datos MSQL.

    Estoy trabajando en un proyecto con arduino, y para mi es muy importante el manejo de la información en tiempo real desde APPs en bases de datos remotas.

    Muchas felicidades por el material que aquí se expone. Me está ayudando mucho.
    Un saludo

    1. Hola,
      ya solo funciona utilizando AsynTask, por si alguien (no es el caso de Oscar) estaba utilizando este proyecto y no el actualizado a Android 5 (API 21) y que está publicado en esta misma serie: Sincronización con MySQL: proyecto con Android Studio para Android 5.0
      Además, hemos actualizado ese proyecto que ya se puede descargar en ese tutorial. En la explicación del proyecto hemos incluido una imagen de la vista «Project Files» de la ruta del conector JDBC y al final describimos las dependencias Gradle declaradas y versión del servidor MySQL.
      Gracias Oscar por tus comentarios

  3. Ya se subió el mismo proceso pero para Android Studio? tengo problemas , me sale ClassNotFoundException cuando busca en Driver.

      1. Hola buenas noches viendo el proyecto ya actualizado a la versión 5.0 veo ya como poner la librería jar , pero tengo una duda quiero habilitar mi proyecto con lo aprendido pero leyendo comentarios veo que mencionan que ya no se pueden hacer sin el uso de async no logró hacer que se actualice mi Bd me podrían ayudar ya puse la librería también en el gradle lo único diferente es que no uso asyn yya que estoy experimentando el código

        1. Hola Raul, vemos que también nos has enviado un correo con este tema. Te contestamos allí.

          1. Hola tengo una duda, estoy siguiendo tu tutorial. Tengo en mi XAMPP el phpmyadmin activo. Accedo a traves de 127.0.0.1:8081/phpmyadmin

            Siguiendo con la conexion que mostraste arriba, tengo esto en el codigo:

            Class.forName(«com.mysql.jdbc.Driver»).newInstance();
            Conexion = DriverManager.getConnection(«jdbc:mysql://127.0.0.1:8081/phpmyadmin/NOMBRE DE MI BASE DE DATOS/», user, pass);

            Lamentablemente no logro dar con la conexion. El statement me retorna un puntero null. Necesito ayuda, muchas gracias

  4. Si quiero hacer la sincronización inversa es decir ingresar datos en el servidor y visualizarlos en Android ?

    1. Al insertar datos en la base de datos MySQL los vería en tu App Android al sincronizar en ella, ya que se realizaría una nueva consulta a esa bbdd externa y traería esos nuevos registros. Se podría incluso automatizar esa sincronización programando la consulta para que se realice cada X tiempo usando por ejemplo la clase AlarmManager (http://academiaandroid.com/proyecto-alarmmanager/)

      Lo que no sabemos es si te estás refiriendo a algo más complejo (por ejemplo sincronizar una base de datos local SQLite desde una MySQL externa) o algo así, pero quedaría mucho más allá de este ejemplo de proyecto que hemos publicado aquí.

Los comentarios están cerrados.

Volver arriba
Esta web usa cookies para su correcto funcionamiento. No hay cookies de publicidad, aunque algunos de los contenidos mostrados (videos o documentos insertados) están alojados en servicios externos (Youtube, Vimeo, Box...) que sí pueden implementar sus propias cookies. También se ha incluido en pruebas un Agente AI que incluye sus propias cookies   
Privacidad