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 ejemploCrear 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.
- 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.
- 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!










reynaldo dice:
Septiembre 23rd, 2008 a las 12:00 am
espero que pueda servirme
Alan dice:
Septiembre 25th, 2008 a las 11:05 am
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
Cristian dice:
Septiembre 25th, 2008 a las 11:21 am
Muchas gracias Alan, estoy seguro que a alguien ha de servirle.
Un saludo!
Slifer dice:
Octubre 9th, 2008 a las 1:08 pm
Muy Bueno….. esos ejemplos asi son los que realmente sirven….
Luis Diaz dice:
Octubre 24th, 2008 a las 11:33 pm
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.
Cristian dice:
Octubre 25th, 2008 a las 1:50 pm
Preguntas especÃicas en el foro de elhacker.net.
pascual dice:
Diciembre 15th, 2008 a las 11:05 am
espero q me ayude vastante estos ejemplos ok
Jhon dice:
Diciembre 17th, 2008 a las 10:30 pm
Muchas gracias por el aporte, la verdad me ha servido mucho