You are on page 1of 8

Java y NetBeans (II), Conexin con Java y Mysql

Por ciertos motivos recientemente me cambie de trabajo y con ello ya no segu con el desarrollo en Java, pero como no me gusta dejar las cosas a medias durante mis ratos libres seguir escribiendo sobre java y NetBeans. En esta ocasin como acceder a una base de datos Mysql. Lo primero que necesitamos es el driver para que java se pueda entender con Mysql, ese driver lo pueden descargar desde este enlace:http://dev.mysql.com/downloads/connector/j/ Al descomprimir el paquete notaran varios archivos pero el que realmente nos interesa es este .jar mysql-connector-java-x.xx.x-bin.jar dependiendo del directorio de instalacin de java ese archivo se debe guardar en una carpeta parecida a esta: C:\Program Files (x86)\Java\jdk1.6.0_21\jre\lib\ext en esa carpeta ya hay otros .jar El siguiente paso ser crear una pequea base en mysql, mi base de ejemplo se llama java y contiene una sola tabla llamada usuario que a su vez solo tiene 3 campos, usuario, contra y status. Le agregu un registro y qued de esta manera:

Emplear el ejemplo de la leccin anterior formulario login para continuar. Recordando un poco el formulario pide los datos de usuario y contrasea para acceder al

sistema solo que no realizaba ninguna conexin. Primero se debe crear la clase para conectarnos, yo le he llamado conexion. Su rbol de archivos debe quedar ms o menos as:

y el codigo es el siguiente:
package conexion;

import java.sql.*; public class conexion { public String bd = "java"; //asegurate de cambiar esto por el nombre tu usuario en mysql public String login = "root"; //aqui escribe la contrasea de ese usuario public String password = "root"; public String url = "jdbc:mysql://localhost/"+bd; public Statement conectar() { Connection conn = null; Statement st=null; try { Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager.getConnection(url, login, password); if (conn != null)

{ System.out.println("Yeah, hemos conectado con "+url+" ... Ok");

st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONL Y);

//conn.close(); } } catch(SQLException ex) { System.out.println("Rayos!!! Hubo un problema al conectar con la base "+url); } catch(ClassNotFoundException ex) { System.out.println(ex); } return st; } }

La primera lnea package conexion; puede variar segn el nombre que le hayan dado a su proyecto. En trminos generales el cdigo es fcil de comprender y como esta clase es sencilla solo nos devolver una variable Statement que es la que se encargara de enviar las consultas a mysql la lnea ms importante aqu es:
st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONL Y);

Con esto creamos la variable Statement, aunque puede utilizarse sin enviarle parmetros, para este ejemplo es necesario enviarle estos dos:
ResultSet.TYPE_SCROLL_INSENSITIVE

TYPE_SCROLL_INSENSITIVE le indica al resulset que los cambios que se hagan mientras la conexion est abierta no se reflejen, adems nos servir para detectar el numero de registros que nos arroje como resultado la consulta.
ResultSet.CONCUR_READ_ONLY

CONCUR_READ_ONLY establece que los datos que se devuelven sern de solo lectura. Regresamos al formulario principal y hacemos visible el componente dialog y damos doble clic en el botn ingresar para ver su mtodo ActionPerformed

Si siguieron el ejemplo anterior recordaran que si se dejaba uno de los campos vacios el formulario muestra un mensaje de error pero si se ingresan los datos nos deja ver el formulario principal ahora nos vamos precisamente a esa seccin del mtodo para realizar la consulta desde nuestra base; El cdigo que se agregar cuando se introduzcan los datos de usuario y contrasea ser este:
//creamos una instancia de la clase conexion conexion conectar = new conexion(); //se llama a la funcion conectar que nos devuelve un statement Statement st =conectar.conectar();

try { //realizamos la consulta ResultSet rs = st.executeQuery("SELECT * FROM usuario WHERE usuario='"+usuario+"' AND contra ='"+password+"'");

//hay que posicionarse en el ultimo registro rs.last();

//recuperamos el numero de registros del Resulset int encontrado=rs.getRow();

if(encontrado==1) // si nos devuelve un registro significa que la autenticacion es co rrecta y mostramos el formulario { this.setVisible(true); dialog_login.setVisible(false); } else { JOptionPane.showMessageDialog(null, "Sus datos son incorrectos, reviselos"); } //cerramos la conexion rs.close(); st.close(); } catch (Exception e) { e.printStackTrace(); }

Como vemos el cdigo tampoco es tan complicado de entender. Aqu les pongo el cdigo completo del mtodo ActionPerformed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

String usuario=tusuario.getText(); String password=tcontra.getText(); if((usuario.isEmpty())||(password.isEmpty())) { JOptionPane.showMessageDialog(null, "Ingrese su nombre de usuario y contrasea"); } else { conexion conectar = new conexion(); Statement st =conectar.conectar();

try {

ResultSet rs = st.executeQuery("SELECT * FROM usuario WHERE usuario='"+usuario+"' AN D contra ='"+password+"'"); rs.last();

int encontrado=rs.getRow(); System.out.println(String.valueOf(encontrado)); if(encontrado==1) { this.setVisible(true); dialog_login.setVisible(false); } else { JOptionPane.showMessageDialog(null, "Sus datos son incorrectos, reviselos");

rs.close(); st.close(); } catch (Exception e) { e.printStackTrace(); }

} }

Ejecuten el formulario y si todo sale bien se podrn ver los mensaje en la consola de java

y si nada sale bien pues arremetan sin piedad contra m en sus comentarios. Quiz lo que les resulte incomodo es trabajar con un form creado en una leccin anterior y no con uno hecho desde cero; de cualquier manera aqu les dejo la leccin para que la descarguen y prueben en sus maquinas.