Java Data Base Connectivity

Java Data Base Connectivity (JDBC)
Información sobre la plantilla
Java.jpeg
Concepto:El API JDBC permite la invocación de comandos SQL desde métodos de lenguaje de programación Java. Se puede utilizar las API JDBC en un Enterprise Bean cuando hay acceso a la base de datos mediante sesiones de Enterprise Bean. También se puede usar el API JDBC desde un servlet o una página JSP para acceder a la base de datos directamente sin pasar por una capa de lógica de negocios.

JDBC (Java Data Base Connectivity), es el API para la conexión a bases de datos desde el lenguaje Java, lo que nos permite ejecutar operaciones sobre bases de datos, realizando estas operaciones con lenguaje SQL de la base de datos.


Introducción

Para realizar esta conexión además de conocer el lenguaje Java, así como tener instalada la Máquina Virtual de Java (JVM) y un Entorno de Desarrollo Integrado (IDE por sus siglas en inglés), se debe adicionar el Controlador o Driver para trabajar con una base de datos específica. En este artículo se explicará cómo conectar a una base de datos en PostgreSQL utilizando el IDE NetBeans.

Añadir Librería

Abrimos el IDE NetBeans y vamos al Menú Herramientas (Tools) y luego a Librerías, una vez ahí seleccionamos “Nueva Librería” nos aparece “Nombre de libreria” donde digitamos un nombre que nos sugiera su contenido, en este caso se le llamó “PostgreSQL”. Luego presionamos el Botón “Add Jar/Folder”, donde seleccionamos el driver que vamos a utilizar, en este caso se utilizó “postgresql-8.3-603.jdbc4.jar” y presionamos OK,

Una vez adicionado el Driver ya estamos en condiciones de hacer nuestro primer programa que se conecte con la base de datos desde java.


Crear la clase Conexion

Lo primero que hacemos es crear una clase que permita conectar con nuestra base de datos, la cual llamamos “Conexion”, que es la que va a contener la configuración y los métodos que nos van a servir para interactuar con la base de datos.

Una vez creada debemos establecer nuestros atributos que serán fundamentales para establecer la conexión.

String driver = "org.postgresql.Driver"; String CadenaConexion = "jdbc:postgresql://localhost:5432/MiBD"; String Usuario = "postgres"; String Contrasenna = "postgres";

En esta parte del código estamos declarando e inicializando variables del tipo String con toda la información necesaria para la conexión a la base de datos, primero tenemos el nombre del driver que es “org.postgresql.Driver”, luego la dirección de la base de datos a la cual nos queremos conectar, siguiendo el formato:

jdbc:postgreslq://ubicacion_de_BD:puerto/nombre_BD

Luego tenemos el “usuario” y “contrasenna”, necesarios para conectarnos a la base de datos.

Ya establecidos los atributos de nuestra clase, continuamos con la creación del constructor, en este caso se crearon 2, uno para crear un objeto con la configuración por defecto y otro para crearlo con una configuración personalizada.

public Conexion() throws Exception { }

public Conexion(String IPConexion, String Puerto, String DBNombre, String Usuario, String Contrasenna) throws Exception {

      CadenaConexion = "jdbc:postgresql://" + IPConexion + ":" + Puerto + "/" + DBNombre;
       this.Usuario = Usuario;
       this.Contrasenna = Contrasenna;

}

Luego creamos los métodos que nos van a permitir que se establezca y se cierren las conexiones con la base de datos.

public void AbrirConexion() throws Exception {

       try 
       {
           Class.forName(Driver);
           Conex = DriverManager.getConnection(CadenaConexion, Usuario , Contrasenna);
           stmt = Conex.createStatement();
       } 
       catch (Exception e) 
       {
           throw e;
       }

}

Lo primero que realizamos para abrir una conexión es cargar el driver en memoria con la función “Class.forName”, pasándole como parámetro el String donde asignamos el nombre del driver que queremos usar.

Luego de eso definimos un objeto del tipo “Connection” para realizar la conexión con la base de datos, la función encargada de hacer la conexión es “DriverManager.getConnection”, que recibe como parámetros el String con la información de la base de datos, y los String de “usuario” y “contrasenna”. Luego de eso definimos un objeto del tipo Statement (Sentencia), el cual nos permitirá realizar las diferentes operaciones sobre nuestra base de datos mediante sentencias SQL.

public void CerrarConexion() throws Exception {

       try 
       {
           stmt.close();
           Conex.close();
       } 
       catch (Exception e) 
       {
           throw e;
       }

}

Para cerrar la conexión debemos cerrar la sentencia y luego la conexión utilizando el método “Close()” correspondiente a cada uno.

Teniendo ya los parámetros y métodos para establecer y cerrar la conexión nuestra base de datos comenzamos a realizar métodos para realizar consultas a la misma, a continuación mostramos un ejemplo.

public IUsuario getUsuario(String user) throws Exception {

       try 
       {
           IUsuario usuario = new Usuario();
           AbrirConexion();
           ResultSet rs = stmt.executeQuery("SELECT * from \"Usuario\" where \"Usuario\".\"Usuario\" = '" + user + "'");

           while (rs.next())
           {
               usuario.setID(rs.getInt("IDUsuario"));
               usuario.setUsuario(rs.getString("Usuario"));
               usuario.setContrasenna(rs.getString("Contrasenna"));
               usuario.setAdmin(rs.getBoolean("Admin"));
           }
           CerrarConexion();
           return usuario;
       }
       catch (Exception e) 
       {
           CerrarConexion();
           throw e;
       }

}

Este método fue creado para extraer datos de una tabla llamada Usuario que se encuentra en nuestra base de datos, para lo cual hemos creado una clase para crear instancias u objetos donde almacenaremos y procesaremos la información extraída orientada a objeto. Primero creamos un objeto de tipo IUsuario (interfaz implementada por la clase Usuario) y abrimos la conexión con el método creado anteriormente. Luego creamos un objeto de tipo ResultSet (Tabla de Resultados) donde se almacenarán los resultados de la consulta a ejecutar. Para ejecutar la consulta o query usamos la función ExecuteQuery que recibe como parámetro un String con la consulta SQL que queremos ejecutar.

while (rs.next())

Una vez que tengamos el resultado que arrojó la consulta en nuestro objeto del tipo “ResultSet”, debemos mover el apuntador, para recorrer todas las tuplas que devolvió la consulta. Para mover el apuntador usamos la función “next()” del ResultSet, la cual colocamos como condición de un while (mientras existan tuplas que mostrar) y mientras se cumpla la condición vamos almacenando los datos en nuestro objeto “usuario”. El objeto “ResutlSet” tiene funciones que devuelven diferentes tipos de datos tales como String, double, int, etc., las cuales vamos a utilizar para ir almacenando los datos extraídos de la base de datos. Finalmente cerramos la conexión y devolvemos el objeto “usuario” y así tenemos un método que devuelve un usuario registrados en la base de datos.

Como un último detalle, observamos que en el código que tenemos un try, el cual captura una excepción (error) que suceda tanto al momento de hacer la conexión o ejecutar la consulta, la cual la capturamos en la variable e y se lanzará para ser tratada según se entienda.


Utilizando la clase Conexion

Para utilizar la clase “Conexion” debemos tan solo debemos crear un objeto de la clase donde deseemos utilizarlo y trabajar con los métodos que hayamos creado para trabajar con nuestra base de datos.

… Conexion conex = new Conexion(); IUsuario usuario = conex.getUsuario(“kronos”); …

Fuentes