martes, 14 de junio de 2016

JDBC con Mysql Parte I

Ahora nos conectaremos a base de datos por JDBC.

Bueno para este ejemplo usaremos:

  • Java jdk 1.8 
  • Eclipse (En mi caso Spring Tool Suite que es casi lo mismo) 
  • Mysql 5.7





¿Que haremos?
Un CRUD sencillo...

  • Actualizaremos una tabla
  • Guardaremos registros en una tabla
  • Leeremos los datos de una tabla
  • Insertar información en la tabla
  • Ejecutar un procedimiento almacenado.


Parece que esta publicación nos demandara un poco de café...
Antes de empezar ya debemos tener nuestra base de datos creada con nuestra tabla y SP

Nuestra base de datos para el ejemplo se llama: dbtest
Script para crear Tabla
Script para insertar datos a la tabla
Script para crear un SP 1
Script para crear un SP 2

Si te preguntas como crear la base de datos o ejecutar archivos .sql, entra AQUI

Primero crearemos un proyecto java desde cero.


Lo llamaremos JDBC_TEST


Nos queda así:


Click derecho sobre el proyecto y vamos a crear una carpeta "lib" para agregar la libreria jdbc para Mysql


Seleccionamos nuestro proyecto, y presionamos FINISH



Nos queda así:


Copiamos el .jar jdbc de Mysql (Click derecho, copiar). El driver se puede descargar AQUI


Luego vamos a nuestro proyecto y en la carpeta "lib" damos click derecho y pegamos.


Esto quedara así:



Ahora que tenemos el driver en nuestro proyecto, para poder usarlo, tenemos que hacer una referencia, es decir decirle a nuestro proyecto donde se encuentra dicha librería. Para ello seleccionamos nuestro proyecto, damos click derecho, y vamos a propiedades.


Luego en la parte izquierda seleccionamos "Java Build Path"; en la aprte del medio seleccionamos la pestaña "Libraries" y en la parte derecha presionamos el botón "Add JAR"


Nos aparece la siguiente pantalla, vamos a nuestro proyecto, a la carpeta lib, ahí seleccionamos al librería, y presionamos el botón "OK"


Finalmente se observara que ya realizamos al referencia de nuestra librería, por ultimo presionamos el botón "OK"


Nuestro proyecto queda algo así:


Ahora Crearemos una Clase: Main.




SELECT  JDBC


Con esta sentencia nos conectaremos a:
base de datos: dbtest
usuario: root
Clave: 1234
La tabla que vamos a consultar se llama: auto
Las columnas que vamos a mostrar son: marca y placa (esto es el nombre de la columna de la tabla auto).

Recordemos para esto nuestra base de datos, tablas y stored procedure deben estar creados, estos e encuentra en una publicación anterior AQUI.

import java.sql.*;

public class Main {

 public static void main(String[] args) {
  
  try {
   // 1. Obtener la conexion a la base de datos
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest", "root", "1234");
   
   // 2. Crear un statement
   Statement smt = conn.createStatement();
   
   // 3. Ejecutar un Query SQL
   ResultSet rs = smt.executeQuery("select * from auto;");
   
   // 4. Visualizar el resultado en la pantalla.
   while(rs.next()){
    System.out.println(rs.getString("marca") + " \t\t" + rs.getString("placa"));
   }
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
 
 }
}



Si se ejecuta se muestra lo siguiente:

Consultamos la tabla en Mysql, lo mismo se visualiza.




INSERT  JDBC


Para ello, empleamos el siguiente código.

import java.sql.*;

public class MainInsert {

 public static void main(String[] args) {
  
  try {
   // 1. Obtener la conexion a la base de datos
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest", "root", "1234");
   
   // 2. Crear un statement
   Statement smt = conn.createStatement();
   
   // 3. Crear la sentencia SQL de insert
   String sql = "insert into auto(idAuto, Placa, Marca) values(5, 'UUU-111', 'Nisan');";
   
   // 4. Ejecutar Query.
   smt.executeUpdate(sql);
   
   System.out.println("Se ingreso correctamente.");
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
 
 }
}


El resultado es el siguiente. (Recordemos!, que la columna idAuto es clave primaria y nose puede repetir, la columna placa, también lo definimos como único, así que si se ejecuta dos veces esto seguro a la siguiente saldrá un error.)


Consultamos en nuestra tabla, se observa que si se inserto el registro anterior.



UPDATE  JDBC


Para realizar una actualización, emplearemos el siguiente código.

import java.sql.*;

public class MainUpdate {

 public static void main(String[] args) {
  
  try {
   // 1. Obtener la conexion a la base de datos
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest", "root", "1234");
   
   // 2. Crear un statement
   Statement smt = conn.createStatement();
   
   // 3. Crear la sentencia SQL de update
   String sql = "update auto set modelo = 'Futurista' where idAuto = 5;";
   
   // 4. Ejecutar Query.
   smt.executeUpdate(sql);
   
   System.out.println("Se actualizo correctamente.");
   
  } catch (SQLException e) {
   e.printStackTrace();
  }

 }
}


Se visualiza el resultado siguiente.


Se consulta en la tabla en Mysql, se observa que si fue actualizado, el valor.



DELETE  JDBC


Para borrar, emplearemos el siguiente código.

import java.sql.*;

public class MainDelete {
 public static void main(String[] args) {
  
  try {
   // 1. Obtener la conexion a la base de datos
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest", "root", "1234");
   
   // 2. Crear un statement
   Statement smt = conn.createStatement();
   
   // 3. Crear la sentencia SQL de delete
   String sql = "delete from auto where idAuto = 1;";
   
   // 4. Ejecutar Query.
   int filasAfectadas = smt.executeUpdate(sql);
   
   System.out.println("Se elimino: " + filasAfectadas + " filas.");
   System.out.println("Se elimino correctamente.");
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}


El resultado es:


Consultamos en nuestra tabla en Mysql, se elimino el registro con idAuto = 1



PREPARED STATEMENT JDBC


¿Que esto?, bueno otra forma de realizar un select, pero con filtros "where". Para ello emplearemos el siguiente código:

import java.sql.*;

public class MainPrepared {
 public static void main(String[] args) {
  
  try {
   // 1. Obtener la conexion a la base de datos
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest", "root", "1234");
   
   // 2. Preparar un statement
   PreparedStatement smt = conn.prepareStatement("select * from auto where Marca = ? and color = ?");
   
   // 3. Enviar los parametros
   smt.setString(1, "KIA");
   smt.setString(2, "BLANCO");
   
   // 4. Ejecutar Sentencia SQL
   ResultSet rs = smt.executeQuery();
   
   // 5. Mostrar informacion
   while(rs.next()){
    System.out.println(rs.getString("marca") + " \t\t" + rs.getString("placa"));
   }
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
 
 }
}

Se visualiza el siguiente código:


EJECUTAR UN STORED PROCEDURE JDBC 


Para ejecutar un procedure, realizaremos el siguiente código, este es un stored procedure(SP) que admite un valor de entrada.

import java.sql.*;

public class MainStoreProcedure {

 public static void main(String[] args) {
  
  try {
   // 1. Obtener la conexion a la base de datos
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest", "root", "1234");
   
   // 2. Preparar un CallableStatement
   CallableStatement smt = conn.prepareCall("call prcAutos(?);");
   
   // 3. Enviar los parametros
   smt.setString(1, "KIA");
   
   // 4. Ejecutar el procedimiento almacenado.
   ResultSet rs = smt.executeQuery();
   
   // 5. Mostrar informacion
   while(rs.next()){
    System.out.println(rs.getString("Marca") + " \t\t" + rs.getString("Modelo"));
   }
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
 
 }
}


Podemos visualizar:


EJECUTAR STORED PROCEDURE PERO CON SALIDA DE DATOS JDBC


Este permite enviar un dato de entrada, y al procesar el Stored Procedure retorna un valor de salida.

import java.sql.*;

public class MainStoreProcedureOut {

 public static void main(String[] args) {
  try {
   // 1. Obtener la conexion a la base de datos
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest", "root", "1234");
   
   // 2. Preparar un CallableStatement
   CallableStatement smt = conn.prepareCall("call prcContarAutosMarca(?, ?);");
   
   // 3. Enviar los parametros
   smt.setString(1, "KIA");
   smt.registerOutParameter(2, Types.INTEGER);
   
   
   // 4. Ejecutar el procedimiento almacenado.
   smt.executeQuery();
   
   // 5. Mostrar informacion
   int   cantidad = smt.getInt(2); 
   System.out.println("Cantidad de autos: " + cantidad);
   
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}


Podemos visualizarlo en pantalla así:



.............. y Fin :) Acabamos  Hemos, cubierto todos los puntos..¿eso es todo?, así es, es lo básico.





No hay comentarios:

Publicar un comentario