como conectar mysql con java

20
¿Como conectar Mysql con Java? julio 9, 2014 James Revelo Conectar tus aplicaciones Java a un servidor de bases de datos es imprescindible para la funcionalidad de una solución de Software. Al igual que Sql server y C# , Mysql y Javanecesitan de una interfaz que proporcione las clases necesarias para gestionar una conexión. Para comprender el funcionamiento de este enlace comenzaremos explicando como adherir elAPI de conexión a nuestros IDEs ( en este caso veremos como hacerlo con Netbeans yEclipse), luego implementaremos el código para abrir la conexión. En seguida veremos comoejecutar comandos y al finalizar estudiaremos la ejecución de procedimientos almacenados.

Upload: usias-chuquillanqui-chihuan

Post on 05-Nov-2015

48 views

Category:

Documents


5 download

DESCRIPTION

mysql

TRANSCRIPT

Como conectar Mysql con Java?julio 9, 2014James Revelo

Conectar tusaplicaciones Javaa unservidor de bases de datoses imprescindible para la funcionalidad de una solucin deSoftware. Al igual queSql serveryC#,MysqlyJavanecesitan de una interfaz que proporcione las clases necesarias para gestionar una conexin.Para comprender el funcionamiento de este enlace comenzaremos explicando como adherir elAPI de conexina nuestrosIDEs( en este caso veremos como hacerlo conNetbeansyEclipse), luego implementaremos el cdigo paraabrir la conexin. En seguida veremos comoejecutar comandosy al finalizar estudiaremos laejecucin de procedimientos almacenados.Que es el API de conexin?Es unconjunto de interfaces relacionadasque permiten realizar una conexin de un servidor de bases de datos a una aplicacinJava. Normalmente se le denominaJDBC(Java Database Connectivity).La idea es usar unDriverque gestione el acceso a un servidorMysql, y as abrir la conexin con la intencin de ejecutar comandos en la base de datos.Este Driver puedes descargarlo desde aquo ir al sitio original de descargas:http://www.mysql.com/downloads/Como incluyo el Driver en NetBeans?Es sencillo! Primero extraes elDriveren un lugar especifico que te parezca cmodo, por ejemplo a la rutaC:mysqlDriver. Luego entra aNetbeansy sitate en la barra de herramientas Projects.

Explorador de proyectos en Netbeans

Ahora haz clic derecho en la carpeta Libraries y presiona la opcin Add JAR/FOLDER .

Aadiendo un nuevo JAR al proyecto

Ahora busca el archivo mysql-connector-java-5.1.31-bin.jar en la carpeta descomprimida.

Seleccionando el conector

Cuando hayas incluido el archivo, el explorador de proyectos mostrar una nueva dependencia hacia el conector. Ahora ya puedes conectar tu aplicacinJavay una base de datos enMysql.

Nueva dependencia en nuestro proyecto

Como instalo el Driver en Eclipse?La instalacin en esteIDEes muy similar aNetbeans. Recuerda que el primer paso es extraer el archivo del conector en un lugar conveniente para ti. Ahora enfocate en la barra de herramientas llamada Package Explorer:

Explorador de paquetes en Eclipse

Ahora agregaremos la dependencia de nuestro archivo.jar. Para ello haremos clic derecho en el proyecto y seguiremos la rutaBuild Path>Add External Archives

Aadir el arhivo JAR de conexin

Busca el archivo mysql-connector-java-5.1.31-bin.jar en donde extrajiste el conector y seleccinalo.

Seleccion del conector MySQL

Si todo sali bien, tendrs una nueva librera externa con el nombre de nuestro conector. Con eso ya podrs ejecutar acciones sobre las base de datos del servidorMysql.

Dependencia adicional a nuestro Conector

Como realizo la conexin a mi base de datos?Primero incluiremos todas las clasesJDBCdesde elpaquete sql:import java.sql.*;En este paquete se encuentran las clases pararegistrar la conexina nuestra base de datos,crear un comando, crear instancias paraejecutar procedimientosy mucho mas.Luego inicializamos elDrivercon el mtodo estticoClass.forName().Este mtodo le dice a lamquina virtual de Javaque busque en tiempo real la clase en el directorio de variables (PATH,CLASSPATH, etc) .En el caso deNetbeansyEclipsetambin buscaren las directivas del proyecto adicionales.try { Class.forName("com.mysql.jdbc.Driver").newInstance(); System.out.println("Registro exitoso");

} catch (Exception e) {

System.out.println(e.toString());

}Ahora para abrir la conexin usamos la interfazConnection, la cual recibe lareferencia del servidorde bases de datos a travs del mtodogetConnection()de la interfazDriverManager:Connection con = null;//...

try {

con = DriverManager.getConnection( "jdbc:mysql://localhost/TuBaseDeDatos?" + "user=TuUsuario&password=TuPass");

// Otros y operaciones sobre la base de datos...

} catch (SQLException ex) {

// Mantener el control sobre el tipo de error System.out.println("SQLException: " + ex.getMessage());

}ElStringque recibegetConnection()se refiere a alcadena de conexinpara acceder a nuestra base de datos. Debemos indicar elnombre del servidor, elnombre de la base de datos,usuarioypassword. Hay otros parmetros adicionales, pero estos son bsicamente los que permiten un acceso rpido y corriente a la base de datos.Veamos la sintaxis:jdbc:mysql://[host:puerto],[host:puerto].../[base_de_datos][?propiedad1][=valor1][&propiedad2][=valor2]...Aquellas partes que se encuentran encorchetesson opcionales. Finalmente usa el mtodoclose()para cerrar la conexin de forma segura.con.close();Que hago para ejecutar un comando?Usaremos la claseStatement(sentencia,esp.) para realizar operaciones sobre nuestra base de datos. Crearemos una instancia de la clase con el mtodocreateStatement()de la claseConnection:Statement cmd = con.createStatement();Recuerda que una consulta (SELECT) retorna en una o mas filas de una tabla. En cambio la insercin, modificacin y eliminacincambianla base de datos, pero no retornan en una estructura tabular.Teniendo en cuenta esto, usaremos dos mtodos distintos de la claseStatementdependiendo deltipo de comando. Si vas a implementar un comandoINSERT,DELETE,UPDATE,SET, etc., usas el mtodoexecuteUpdate():try { cmd = con.createStatement();

cmd.executeUpdate("DELETE FROM HERRAMIENTA WHERE NOMBRE = 'Serrucho'"); // ...}Como ves,executeUpdate()recibe como parmetro la cadena que representa al comando. En el caso de usarSELECT, emplearemos el mtodoexecuteQuery(), cuyo resultado es de tipoResultSet. Esta clase hace parte delpaquete sqlque importamos, y sirve para manejar las filas retornadas de una consulta.Por ejemploResultSet rs = null;Statement cmd = null;

// ...

try {

cmd = con.createStatement();

rs = cmd.executeQuery("SELECT NOMBRE, EDAD FROM CIUDADANO");

// ...}Ahora, si queremos ver en pantalla los resultados o simplemente acceder a cada fila, usaremos el mtodonext()de la claseResulSet. Este mtodo nos permitir mover unpuntero de lecturaa la siguiente fila del resultado en forma secuencial, hasta que se haya recorrido la tabla completa. Usaremos unwhileque lea todo el resultado.while (rs.next()) { String nombre = rs.getString("NOMBRE"); intedad = rs.getInt(2); System.out.println(nombre + "-" + edad);}

rs.close();El cdigo anterior implementa los mtodosgetString()ygetInt()deResultSet. Ambos mtodos obtienen el valor de la columna retornada, especificando elnombrede la columna o suposicin. Es importante cerrar el objetoResultSetconclose()paradesreferenciar el punteroque estaba recorriendo la tabla.Quisiera saber como generalizar mis comandos!Es justamente lo que quera explicarte!, ya que hacer genrico un comando es esencial para combinarlo con los datos proporcionados por loscontroles Swing de Java.Supn que un usuario va aeliminarun cliente de la base de datos a travs del cdigo. Como hacer para embeber este cdigo en elStringde comando?La respuesta esta en la clasePreparedStatement. Esta clase permiteejecutar varias vecesun comando con tan solo unadefinicin genrica. Para ello usaremos el carcter ?, el cual otorgacapacidad polimorfaal parmetro incluidoen elcomando.Esta es la respuesta a la pregunta inicial:PreparedStatement pCmd = con.prepareStatement("DELETE FROM CLIENTE" + " WHERE ID = ? ");// ...int valor = Integer.parseInt(jTextField1.getText());pCmd.setInt(1, valor);pCmd.executeUpdate();Como ves, usamos ? para indicar que el cdigo del cliente ser variable. Luego usamos el mtodosetInt()para especificar que en el primer ? vamos a poner el valor de la variable extrado delText Field.Como hago con los procedimientos almacenados?Empleamos la claseCallableStatement. Esta clase permite especificar el tipo de parmetros que tiene el procedimiento, ya seaIN,OUToINOUT. Ademas permite gestionar los resultados en forma tabular que arroje el procedimiento, si es que los arroja, u obtener el valor de los parmetros tipoOUT.Para crear un comando ejecutable usaremos el mtodoprepareCall()de la claseConnection, veamos:CallableStatement cmdC = con.prepareCall(ejecucin_procedimiento);Para hacer la llamada del procedimiento se deben usar llaves {} en la elaboracin de la cadena para el comando. Recuerda que cuando vimosprocedimientos en Mysqlusbamos la clausulaCALLpara ejecutarlo. Aqu tambin usaremosCALLpara ejecutar el comando y adems aadiremos el carcter ? para indicar el polimorfismo de los parmetros.CallableStatement cmdC = con.prepareCallable("{CALL proc_dos_parametros(?,?)}");Por defecto los parmetros son de entrada, pero si en algn momento deseas establecer que alguno es de salida, debes registrarlo mediante el mtodoregisterOutParameter().cmdC.registerOutParameter(2,Types.INTEGER);Este mtodo recibe dos parmetros, el primero es laposicindel parmetro y el segundo es eltipodel parmetro. El tipo lo indicamos mediante los atributos de la claseTypes, la cual contiene todos los tipos de datos empleados enMysql. En este caso en particular registramos al segundo parmetro comoOUTy de tipoINTEGER.Ahora para alimentar los parmetros de entrada volvemos a usar los mtodosset. Dependiendo del tipo de dato existen las alternativassetInt(),setString(),setDate(),setFloat(), etc. Todo depende de las necesidades.Y como ejecuto un procedimiento almacenado?Primero usaremos el mtodoexecute(), cuyo valor de retorno esbooleano. Si retorna entruesignifica que el procedimiento devuelveuna o mas filas, por lo que usaremos luego el mtodogetResultSet(). Si el valor esfalse, entonces el procedimiento se ejecuta con el mtodoexecuteUpdate()ya que solo modifica la base de datos:if (cmdC.execute()) { ResultSet rs = cmdC.getResultSet(); //Otras acciones...

} else {

System.out.println("No se retornaron resultados");

}Igual que con los comandos normales usaremos los mtodosgetpara obtener los resultados de los parmetros tipoOUT.System.out.println("Parametro OUT:"+cmdC.getInt(1));Amigo, puedes mostrar un ejemplo completo?Claro que si!, fjate en la siguiente situacin:Suponga que le ha vendido un proyecto deSoftwarea laaseguradoraProtectYAPApara gestionar los clientes y la informacin sobre lossegurosque se ofrecen. Usted y su equipo se dan cuenta que necesitan invocar un procedimiento almacenadoen el servidorMysql, cuya funcin es encontrar los clientes mayores a una edad pasada como parmetro. A travs de la interfaz, el usuario final digitar el valor mediante unJTextField, que est contenido en unJFramede reglas.Para solucionar el anterior problema implementaremos el siguiente cdigo:try { con = DriverManager.getConnection( "jdbc:mysql://PROTECTYAPA-SERVER/aseguradora?" + "user=admin&password=admin");

CallableStatement cmd = con.prepareCall("{CALL sp_clientes_edad( ?)} ");

cmd.setString(1, jTextField1.getText());

// Ejecutamos el comando if (cmd.execute()) {

// Obtenemos la tabla retornada ResultSet rs = cmd.getResultSet();

// Obtenemos cada fila del resultado while (rs.next()) { addFila(new Object[]{rs.getString("NOMBRE"), rs.getString("APELLIDO")}); }

}

else{ System.out.println("No se retornaron filas"); }

} catch (SQLException ex) { // Mantener el control sobre el tipo de error System.out.println("SQLException: " + ex.getMessage());}El mtodoaddFila()que invocamos es la implementacin modular de la agregacin de filas a unJTable. Su definicin es la siguiente:publicvoid addFila (Object fila[]){ DefaultTableModel modelo = new DefaultTableModel(); modelo = (DefaultTableModel) jTable1.getModel(); modelo.addRow(fila);}Algn ejemplo con un parmetro OUT?Por supuesto!, miremos otro requerimiento en elSofwarede laempresa de seguros:Se desea llamar a unprocedimiento almacenadoen la base de datos llamadosp_mejor_vendedor. Este procedimiento posee dosparmetros de salidaque reciben el cdigo del mejor vendedor de seguros y la cantidad acumulada de ventas que realiz en el mes.La solucin propuesta por el equipo es la siguiente:try { con = DriverManager.getConnection( "jdbc:mysql://PROTECTYAPA-SERVER/aseguradora?" + "user=admin&password=admin"); CallableStatement cmd = con.prepareCall("{CALL sp_mejor_vendedor( ?, ?)} ");

// Registramos los dosparmetrosde salida cmd.registerOutParameter(1, Types.INTEGER); cmd.registerOutParameter(2, Types.INTEGER);

// Ejecutamos el procedimiento cmd.executeUpdate();

// Obtenemos el valor de ambos parametros int idVendedor = cmd.getInt(1); int monto = cmd.getInt(2);

// Imprimimos los resultados del procedimiento System.out.println(idVendedor + "-" + monto);

} catch (SQLException ex) { // Mantener el control sobre el tipo de error System.out.println("SQLException:" + ex.getMessage());}Estos pequeos ejemplos que acabo de mostrarte han sido construidos de formasecuencialyexplicativa, pero seria conveniente que uses el poder de laProgramacin Orientada a Objetoscuando desees conectar tu aplicacinJavaaMysql.Puedes definir una claseConexiony atribuirlemtodospara ejecutar comandos que devuelvan filas, ejecutar comandos que solo modifiquen la base de datos, abrir la conexin, cambiar de base de datos, etc.Este enfoque te permitirgeneralizartus acciones sobre la base de datos en tu aplicacin, lo que otorgaraflexibilidaden el desarrollo si trabajas con un equipo.

/* * PruebaMySQL.java * * Programa de prueba para conexin a una base de datos de MySQL. * Presupone que el servidor de base de datos est arrancado, disponible, * en el puerto por defecto. * El usuario y password de conexin con la base de datos debe cambiarse. * En la base de datos se supone que hay una base de datos llamada prueba y que * tiene una tabla persona con tres campos, de esta manera: * mysql> create database prueba; * mysql> use prueba; * mysql> create table persona (id smallint auto_increment, nombre varchar(60), * nacimiento date, primary key(id)); */

package chuidiang.ejemplos.base_datos;

import java.sql.*;

/** * Clase de prueba de conexin con una base de datos MySQL */public class PruebaMySQL { /** * Crea una instancia de la clase MySQL y realiza todo el cdigo * de conexin, consulta y muestra de resultados. */ public PruebaMySQL() { // Se mete todo en un try por los posibles errores de MySQL try { // Se registra el Driver de MySQL DriverManager.registerDriver(new org.gjt.mm.mysql.Driver()); // Se obtiene una conexin con la base de datos. Hay que // cambiar el usuario "root" y la clave "la_clave" por las // adecuadas a la base de datos que estemos usando. Connection conexion = DriverManager.getConnection ( "jdbc:mysql://localhost/prueba","root", "la_clave"); // Se crea un Statement, para realizar la consulta Statement s = conexion.createStatement(); // Se realiza la consulta. Los resultados se guardan en el // ResultSet rs ResultSet rs = s.executeQuery ("select * from persona"); // Se recorre el ResultSet, mostrando por pantalla los resultados. while (rs.next()) { System.out.println (rs.getInt ("Id") + " " + rs.getString (2)+ " " + rs.getDate(3)); } // Se cierra la conexin con la base de datos. conexion.close(); } catch (Exception e) { e.printStackTrace(); } } /** * Mtodo principal, instancia una clase PruebaMySQL * * @param args the command line arguments */ public static void main(String[] args) { new PruebaMySQL(); } }

///////***-

Conexin Mysql con Java, usando IDE Eclipse Java EEEn este blog vamos a necesitar algunas herramientas como: editor de java, servidor de base de datos, estos pasos nos ayudaran a llegar a nuestro fin.

1. En primer lugar descargamos e instalamos Eclipse enhttp://www.eclipse.org/downloads/2. Descargamos el conector JDBC para mysql enhttp://dev.mysql.com/downloads/connector/j/3. Abrimos Eclipse, nos ubicamos en Window, Open Perspective, Other, Database Development.4. Click Derecho en Database Connections, New.5. En perfil de conexiones, escogemos MySQL, siguiente.6. Driver, click en definir nuevo driver.7. Especificamos el Driver, tal como se muestra en la imagen.

8. Click en la pestaa JAR List, limpiamos los drivers, ubicamos nuestro Driver JDBC de mysql, el archivo .jar, listo.9. Configuramos los detalles de la conexin como: Database, URL, username y password, como se muestra a continuacin.

Probamos la conexin que sea correcta, y podemos empezar a trabajar con la base de datos en nuestros proyectos.