Suscribirse al Feed
19Nov

Ejemplo básico de programación con JDBC y MySQL

En esta entrada pretendo explicarles un poco el funcionamiento básico de JDBC, cuando desarrollamos aplicaciones en Java que trabajan con bases de datos en MySQL. La idea es mostrar paso a paso la creación de la base de datos, y posteriormente la codificación de una aplicación en Java que consulte los datos. Los lectores que me conocen, saben que me gusta explicar todo detalladamente, para que no que de duda alguna a los que están aprendiendo. Let's Go!

Creando la base de datos

Es de suponer que si estás leyendo esto, tienes ya conocimientos acerca de la creación de bases de datos en MySQL, así como instrucciones en general del lenguaje SQL. Por tanto no nos quedaremos en este punto explicando qué es y cómo se usa MySQL, sino que vamos directo a hacer la base de datos (si se le puede llamar así) que usaremos para jugar hacer las pruebas.

Entonces, abrimos una consola de SQL y ejecutamos los siguientes comandos:

Crear la base de datos y usar la misma:

mysql> create database ejemplo;
mysql> use ejemplo

Crear la tabla de ejemplo e insertar algunos datos:

mysql> create table datos (cod int(2), nombre varchar(30));
mysql> insert into datos values(1, 'Debian');
mysql> insert into datos values(2, 'openSuse');
mysql> insert into datos values(3, 'Gentoo');
mysql> insert into datos values(4, 'Fedora');

Codificar el programa que consulte dichos datos

En pos de no complicar la cosa, y de hacerla más sencilla, la aplicación que vamos a hacer NO posee interfaz gráfica, es decir, vamos mostrar los datos por la consola. Entonces, lo esencial en este caso es tener instalado el conector de MySQL para JDBC, no más.

Primer programa: consultando la base de datos de manera simple


import java.sql.*;
public class Programa {
public static void main(String args[]){
try {
//Cargar clase de controlador de base de datos
Class.forName("com.mysql.jdbc.Driver");
//Crear el objeto de conexion a la base de datos
Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/ejemplo?user=root&password=");
//Crear objeto Statement para realizar queries a la base de datos
Statement instruccion = conexion.createStatement();
//Un objeto ResultSet, almacena los datos de resultados de una consulta
ResultSet tabla = instruccion.executeQuery("SELECT cod , nombre FROM datos");
System.out.println("Codigo\tNombre");
while(tabla.next())
System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2));
}
catch(ClassNotFoundException e){ System.out.println(e); }
catch(SQLException e){ System.out.println(e); }
catch(Exception e){ System.out.println(e); }
}
}

Cosas por explicar en el programa anterior:

  • Es necesario importar el paquete java.sql
  • Class.forName("com.mysql.jdbc.Driver"); Con esta instrucción cargamos el driver de conexión a la base de datos en MySQL. Si somos algo curiosos, podemos notar que dentro del conector (en mi caso mysql-connector-java-5.1.5-bin.jar), se encuentra el archivo Driver.class dentro de las carpetas com/mysql/jdbc.
  • DriverManager.getConnection Luego de cargar el Driver, es necesario crear la conexión a la base de datos. Para ello usamos el método getConnection de la clase DriverManager (que implementa la clase Driver). A dicho método le pasamos como parámetro una URL de conexión a la base de datos, que se compone, por lo general, de tres partes separados por ":", jdbc:nombre_dbms:datos_de_conexion. Aunque esto depende del tipo de DMBS y conector que usemos. (Para más detalles de la URL, ver la documentación específica para el conector).
    Este método además, devuelve un objeto Connection que usaremos para crear y ejecutar sentencias SQL, sobre la base de datos.
  • conexion.createStatement(); este método crea/decuelve un objeto Statement, con el cual podremos ejecutar sentencias en la base de datos.
  • instruccion.executeQuery(); este método sirve para ejecutar consultas sobre la base de datos (para inserción y modificación de datos usar executeUpdate()). Recibe como parametro una sentencia SQL, y devuelve un objeto ResultSet que contendrá los datos de la consulta.
  • while(tabla.next()) esto nos permitirá iterar indefinidamente, mientras en el objeto ResultSet hayan más registros.
    • Posteriormente, dentro del while, podemos obtener los datos de la fila actual con los métodos getInt(int) y getString(int) de ResultSet. A dichos métodos le pasamos como parametro el indice de la columna que queremos obtener.
      Es importante tener en cuenta que en dichos métodos, si una tabla tiene 3 columnas, las referenciamos como 1, 2 y 3. No como en otros lenguajes (PHP por ejemplo), en los que los índices serían 0, 1, 2.
  • Las excepciones que manejamos son básicamente: ClassNotFoundException, que se lanzará por lo general cuando el programa no encuentre el Driver. SQLException, que se lanzará cuando hayan errores a nivel de SQL (errores al insertar datos, errores de sintaxis en las consultas, etc.).

#javac Programa.java
#java Programa
Codigo Nombre
1 Debian
2 openSuse
3 Gentoo
4 Fedora

Segundo programa: consultando la base de datos de manera "elegante"

Veamos entonces otra forma de consultar (los mismos datos), pero de una manera un poco más elegante:


import java.sql.*;
public class Programa2 {
public static void main(String args[]){
try {
//Cargar clase de controlador de base de datos
Class.forName("com.mysql.jdbc.Driver");
//Establecer conexion a la base de datos
Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/ejemplo?user=root&password=");
//Crear objeto Statement para realizar queries a la base de datos
Statement instruccion = conexion.createStatement();
//Consultar a la base de datos
ResultSet conjuntoResultados = instruccion.executeQuery("SELECT cod AS Codigo, nombre AS Nombre FROM datos");
//Procesar los resultados de la consulta
StringBuffer resultados = new StringBuffer();
ResultSetMetaData metaDatos = conjuntoResultados.getMetaData();
int numeroDeColumnas = metaDatos.getColumnCount();
for(int i = 1; i <= numeroDeColumnas; i++)
resultados.append(metaDatos.getColumnName(i)+"\t");
resultados.append("\n");
while(conjuntoResultados.next()) {
for(int i = 1; i <= numeroDeColumnas; i++)
resultados.append(conjuntoResultados.getObject(i) + "\t");
resultados.append("\n");
}
System.out.println(resultados.toString());
}
catch(ClassNotFoundException e){ System.out.println(e); }
catch(SQLException e){ System.out.println(e); }
catch(Exception e){ System.out.println(e.getMessage()); }
}
}

Miremos las diferencias:

  • En este caso, además de usar elobjeto ResultSet para almacenar los datos, usaremos un objeto ResultSetMetaData para obtener los meta-datos de la consulta (los nombres de las columnas, por ejemplo).
  • metaDatos.getColumnCount(); este método retorna un entero con el número de columnas que posee una consulta.
  • metaDatos.getColumnName(i) este método devuelve el nombre de la columna i.
  • conjuntoResultados.getObject(i) este método devuelve un objeto tipo Object que contendrá los datos de la fila actual, y de la columna i.

#javac Programa2.java
#java Programa2
cod nombre
1 Debian
2 openSuse
3 Gentoo
4 Fedora

Descargar código fuente:

Ya saben: cualquier duda pueden comentarla aquí mismo, y pueden usar el contenido de esta entrada como deseen. ¡El conocimiento es poder! ¡Comparte tú poder!

33 Comentarios para “Ejemplo básico de programación con JDBC y MySQL”

« 1 2 3 4 5 Todos

  1. a gravatar

    reynaldo dice:  


    espero que pueda servirme

  2. a gravatar

    Alan dice:  


    bueno quizas esta es una forma de hacer una conexion a mysql, PERO a mi no me salio hay que cambiar una cuantas Lineas..xD..son las siguientes

    Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”);
    //Establecer conexion a la base de datos
    Connection conexion = DriverManager.getConnection(”jdbc:odbc:ejemplo”,”", “”);
    teniendo como usuario en mysql al root con la contraseña igual…espero poder ayudado en algo…xD….ahi los vidrios gente

  3. a gravatar

    Cristian dice:  


    Muchas gracias Alan, estoy seguro que a alguien ha de servirle.

    Un saludo!

  4. a gravatar

    Slifer dice:  


    Muy Bueno….. esos ejemplos asi son los que realmente sirven….

  5. a gravatar

    Luis Diaz dice:  


    Hola a todos disculpen por escribir de esta forma, pero la verdad es que necesito ayuda con el siguiente codigo en Java y mysql.

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {

    String textoCombo;

    textoCombo = (jCbCate.getSelectedItem()).toString();

    //OBTENER EL CODIGO DE LA CATEGORIA ESCOGIDA
    int codigo = 0;
    try{

    String consulta = “select cod_cate, nom_cate from categorias where nom_cate = ‘”+textoCombo+”‘”;
    Statement stm = con.getConnection().createStatement();
    PreparedStatement pstm = con.getConnection().prepareStatement(consulta);

    ResultSet res = pstm.executeQuery();

    codigo = res.getInt(1);
    }
    catch(SQLException ex){

    JOptionPane.showMessageDialog(null,”Error en la consulta con parametros “+ex,”Error Categorias”,JOptionPane.ERROR_MESSAGE);
    }

    JOptionPane.showMessageDialog(null,codigo,”PRUEBA SALIDA”,JOptionPane.INFORMATION_MESSAGE);
    }

    Por favor ayudenme, llevo varios dias tratando de hacer esta consulta pero no he podido.

    De antemano muchas gracias por su ayuda.

  6. a gravatar

    Cristian dice:  


    Preguntas especíicas en el foro de elhacker.net.

  7. a gravatar

    pascual dice:  


    espero q me ayude vastante estos ejemplos ok

  8. a gravatar

    Jhon dice:  


    Muchas gracias por el aporte, la verdad me ha servido mucho

« 1 2 3 4 5 Todos

 

 

Antes de comentar... recuerda que no hago tareas

Te invito a subscribirte al feed RSS. ¿No sabes que es un lector de Feeds?

© 2007 - 2008 Dezinerfolio. Todos los derechos reservados.
Powered by Wordpress. Entradas RSS