domingo, 15 de diciembre de 2019

JDBC

En este blog hemos hablado sobre alternativas a JDBC como JDBI, sin embargo conocer lo esencial siempre es importante.

JDBC fue ideada para crear una interface común entre distintos proveedores de bases de datos. Supongamos que requiero conectarme a una BD Oracle y/o SQL Server, con JDBC podemos crear una conexión sin la necesidad de crear decenas o centenas de clases y sus respectivos métodos, pues JDBC contiene lo esencial para ello.

Existen cuatro tipos de drivers JDBC:
  1. DRIVER PUENTE JDBC-ODBC: Un ejemplo de su uso es cuando queremos conectarnos a una BD de Access o incluso Excel. Al parecer ya no está en uso.
  2. DRIVER NATIVO: El inconveniente es que la máquina cliente debe tener instalador el driver,a unque es más recomendable que el driver JDBC-ODBC.
  3. DRIVER INTERMEDIO (RED): no requiere ningún tipo de instalación den el equipo donde se ejecuta el programa.
  4. DRIVER PURO(JAVA): no requiere ningún tipo de configuración en la máquina cliente.

 JDBC nos permite cargar el driver específico que necesitamos, crear la conexión a la BD, preparar y ejecutar sentencias SQL y visualizar los resultados de las consultas.

¿Cuáles son los pasos para usar JDBC?
Son cuatro pasos:
  1. Conectarnos a la BD: requerimos cargar el driver y crear la conexión.
  2. Ejecución de consultas: crear las sentencias SQL a ejecutar.
  3. Manipulación de registros: lectura, inserción, actualización y eliminación mediante lenguaje SQL(DML).
  4. Cerrar la conexión.


Cargar el driver
private static final String DRIVER_POSTGRES = "org.postgresql.Driver";
//...
Class.forName(DRIVER_POSTGRES);
Crear la conexión:
private static final String url = "jdbc:postgresql://localhost/BD";
private static final String user = "postgres";
private static final String password = "m1Cl4v3";

//Creamos la conexion
Connection conn;
//Postgres
conn = DriverManager.getConnection(url, user, password);
System.out.println("Conexion exitosa!!");
Ejecución y manipulación de datos (y cierre de la sentencia):
stm.execute(sql);
rs = stm.executeQuery(sql);
if(rs.next()) {
//...
rs.close();
}
Cerrar conexión:
conn.close();
//Comprobamos el cierre
if(conn.isClosed() == true) {   
   System.out.println("Conexion cerrada");
}

Ejemplo. Creamos una conexión a PostgreSQL.

  • Clase Main.java
  • Clase Contacto.java
  • Clase ConexionPostgres.java


Contacto.java

package org.inforhomex.modelo;

/**
*@Author Fer Carraro
*
*/

public class Contacto {
 private int id;
 private String nombre;
 private String telefono;

 public Contacto() {
 }

 public Contacto(int id, String nombre, String telefono) {
  super();
  this.id = id;
  this.nombre = nombre;
  this.telefono = telefono;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getNombre() {
  return nombre;
 }

 public void setNombre(String nombre) {
  this.nombre = nombre;
 }

 public String getTelefono() {
  return telefono;
 }

 public void setTelefono(String telefono) {
  this.telefono = telefono;
 }

 @Override
 public String toString() {
  return "Contacto [id=" + id + ", nombre=" + nombre + ", telefono=" + telefono + "]";
 }

}

ConexionPostgres.java
package org.inforhomex.conexion;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;
import java.sql.SQLException;
import java.sql.SQLSyntaxErrorException;
import org.postgresql.util.PSQLException;
import org.inforhomex.modelo.Contacto;


public class ConexionPostgres {
 
 
 private static final String DRIVER_POSTGRES = "org.postgresql.Driver";
 private static final String url = "jdbc:postgresql://localhost/curso";
 private static final String user = "postgres";
 private static final String password = "tuclave";
 

 public static void conexion() throws SQLException, SQLSyntaxErrorException,ClassNotFoundException,PSQLException; { 
  //Postgres
  Class.forName(DRIVER_POSTGRES);
  
  //Creamos la conexion
  Connection conn;
  //Postgres
  conn = DriverManager.getConnection(url, user, password);
  System.out.println("Conexion exitosa!!");
  String sql; 
  //Sentencia SQL Postgres
  sql = "select nombre, telefono from public.contactos limit 1";
  Statement stm;
  ResultSet rs;
  Contacto contacto;
  
  stm = conn.createStatement();
  
  if(stm != null) {
   //ejecutamos consulta
   System.out.println("Ejecutamos consulta...");
   stm.execute(sql);
   rs = stm.executeQuery(sql);
   if(rs.next()) {
    System.out.println("Nombre: "+rs.getString("nombre"));
    System.out.println("Telefono: "+rs.getString("telefono"));
    contacto = new Contacto();
    contacto.setId(1);
    contacto.setNombre(rs.getString("nombre"));
    contacto.setTelefono(rs.getString("telefono"));
    javax.swing.JOptionPane.showMessageDialog(null, contacto,"Contacto encontrado",JOptionPane.INFORMATION_MESSAGE);
   }
   //cerramos el ResultSet
   rs.close();
   //cerramos consulta
   System.out.println("Cerramos consulta...");
   stm.close();
  }
  
  
  //Cerramos la conexion
  conn.close();
  //Comprobamos el cierre
  if(conn.isClosed() == true) {
   System.out.println("Conexion cerrada");
  }
 }

}


Main.java
package org.inforhomex;

import org.inforhomex.conexion.ConexionPostgres;
import org.inforhomex.conexion.Conexion;
import java.sql.SQLException;
import java.sql.SQLSyntaxErrorException;
import javax.swing.JOptionPane;
import org.postgresql.util.PSQLException;
/**
*@Author Fer Carraro
*
*/

public class Main {

 public static void main(String[] args) {
  System.out.println("Inicio");
  try {
   //Nos conectamos a la BD
   ConexionPostgres.conexion();
  } catch(PSQLException ex0) {
   JOptionPane.showMessageDialog(null, ex0.toString(),"PSQLException",JOptionPane.ERROR_MESSAGE);
  }catch (SQLSyntaxErrorException ex1) {
   JOptionPane.showMessageDialog(null, ex1.toString(),"SQLSyntaxErrorException",JOptionPane.ERROR_MESSAGE);
  } catch (SQLException ex2) {
   JOptionPane.showMessageDialog(null, ex2.toString(),"SQLException",JOptionPane.ERROR_MESSAGE);
  } catch (Exception ex3) {
   JOptionPane.showMessageDialog(null, ex3.toString(),"Exception",JOptionPane.ERROR_MESSAGE);
  }finally {
   System.out.println("Hecho");
  }
 }

}

Ejemplo completo en github:

Links:
https://www.javatpoint.com/jdbc-driver 
http://codigoxules.org/conectar-mysql-utilizando-driver-jdbc-java-mysql-jdbc/


Vibe Coding (la programación vía IA): ¿el futuro de la programación?

Vibe Coding es un nuevo paradigma de programación, una nueva forma de crear código. Es un enfoque emergente en el desarrollo de sof...

Etiquetas

Archivo del blog