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:
- 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.
- 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.
- DRIVER INTERMEDIO (RED): no requiere ningún tipo de instalación den el equipo donde se ejecuta el programa.
- 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:
- Conectarnos a la BD: requerimos cargar el driver y crear la conexión.
- Ejecución de consultas: crear las sentencias SQL a ejecutar.
- Manipulación de registros: lectura, inserción, actualización y eliminación mediante lenguaje SQL(DML).
- Cerrar la conexión.
Cargar el driver
private static final String DRIVER_POSTGRES = "org.postgresql.Driver"; //... Class.forName(DRIVER_POSTGRES);
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!!");
stm.execute(sql); rs = stm.executeQuery(sql); if(rs.next()) { //... rs.close(); }
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/