Si necesitas un código de programación en específico, escríbeme al formulario de contacto.

BUSCA TU CÓDIGO


BUSCA MÁS CÓDIGOS DE PROGRAMACIÓN AQUÍ:

Código JAVA: Conectar JAVA con una base de datos usando un Pool de conexiones


Este post está orientado a la aplicación e implementación de una clase en Java, que nos permitirá conectar nuestra aplicación con una Base de datos a través de un Pool de conexiones, e igualmente se llevará a cabo un test de conexión a través de un pequeño fragmento de código el cual se colocará dentro del método de un botón: 

Clase para conectar con nuestra Base de datos (Pool.Java):


package Metodos;

import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;


public class Pool {


    public DataSource dataSource;

    public String db = "fundacion";
    public String url = "jdbc:mysql://localhost/"+db;
    public String user = "root";
    public String pass = "123";



    public Pool(){

        inicializaDataSource();

    }



    private void inicializaDataSource(){


        BasicDataSource basicDataSource = new BasicDataSource();

        basicDataSource.setDriverClassName("org.gjt.mm.mysql.Driver");
        basicDataSource.setUsername(user);
        basicDataSource.setPassword(pass);
        basicDataSource.setUrl(url);
        basicDataSource.setMaxActive(50);


        dataSource = basicDataSource;

    }


}




Código para el Test de Conexión:

private void btnProbarconexionActionPerformed(java.awt.event.ActionEvent evt) {                                                  
        
        
        Pool metodospool = new Pool();
        java.sql.Connection cn = null;


        try {

            cn=metodospool.dataSource.getConnection();

            if(cn!=null){

                JOptionPane.showMessageDialog(null, "Conectado");

            }

        } catch (SQLException e) {

            System.out.println(e);

        }finally{


                try {

                    cn.close();

                } catch (SQLException ex) {

                    System.out.println(ex);

                }


        }


 }                                                 



Instrucciones y Recomendaciones 

1- Primero que todo debemos descargar los archivos .jar que necesitaremos para realizar el Pool de conexiones, los cuales son: commons-dbcp-1.4.jar, commons-pool-1.6.jar, y mysql-connector-java-5.1.16-bin.jar.
A continuación, los añadimos a las librerías de nuestro proyecto; luego crearemos en nuestro proyecto, un paquete al cual llamaremos "Metodos", y dentro de este, crearemos una clase la cual llamaremos "Pool". 




2- Copia y pega el código resaltado en amarillo, después de la línea de código "package Metodos;" y sobre la línea de código "public class Pool {", este fragmento de código se utiliza para importar las Clases y/o librerías necesarias para poder trabajar con ciertas funcionalidades y métodos de nuestra Clase:
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;

3- Ahora copia y pega el código resaltado en azul, dentro de la Clase "public class Pool {}"; es decir, debe quedar rodeado por las llaves "{}" que limitan dicha Clase.

4- La primera parte de este código resaltado en azul, consiste en crear 1 variable de tipo DataSource y public, la cual nos servirá para almacenar la conexión que obtengamos; esta variable será a la que accederemos desde otras Clases para poder realizar las operaciones con nuestra base de datos. En esta parte del código también se crean 4 variables de tipo String y con la propiedad public. En la primera variable String, llamada "db", guardamos el nombre de la Base de datos a la cual nos queremos conectar; en la segunda variable url, guardaremos la ruta de donde se encuentra ubicada nuestra Base de datos, si nos damos cuenta deberemos emplear la api "jdbc:mysql", lo cual permite indicar que queremos conectar nuestra aplicación Java con una Base de datos en MySQL, además debemos consignar la dirección de la máquina que contiene la Base de datos, en este caso como trabajaremos en una sola máquina colocamos "localhost", en el caso dado que trabajemos de forma remota debemos reemplazar este valor por la dirección IP (ej. 192.168.1.2) de la máquina a la cual necesitamos conectarnos, en esta misma variable concatenamos la variable que instanciamos al principio "+db"; luego la tercera y cuarta variable "user" y "pass", corresponden al usuario y la clave para poder tener acceso a la Base de datos:
public DataSource dataSource;

public String db = "fundacion";
public String url = "jdbc:mysql://localhost/"+db;
public String user = "root";
public String pass = "123";

5- Lo siguiente es el método Constructor de la Clase "Pool", en este lo que hacemos es llamar al método inicializaDataSource(), el cual veremos en el siguiente punto. 
Cuando llamamos un método desde el Constructor de una Clase, esto permitirá que apenas se proceda a instanciar dicha Clase desde otra, el método se ejecutará de forma simultánea y/o instantánea:
public Pool(){

        inicializaDataSource();

}

6- Ahora en esta tercera parte del código de la Clase Pool, lo que hacemos es crear un método al cual llamaremos "inicializaDataSource", este contiene la propiedad public y no devolverá ningún valor (propiedad void). Este método es el que nos permitirá realizar la conexión con nuestra base de datos:
private void inicializaDataSource(){}

7- Proseguiremos a instanciar dentro del método que mencionamos en el punto anterior, un objeto de la Clase "BasicDataSource":
BasicDataSource basicDataSource = new BasicDataSource();

8- En esta parte del código, la cual va dentro del método mencionado en el punto 6, lo que haremos será utilizar el objeto que instanciamos en el punto anterior, para establecer la conexión con nuestra base de datos; esto lo logramos pasando una serie de parámetros que no son más que las variables tipo String que creamos al principio de la Clase Pool, además de estas variables también procedemos a cargar la Clase "Driver", que se encuentra ubicada dentro del ".jar" MySQL Connector que agregamos a nuestras librerías. 
Si nos fijamos bien en la última línea de este código:
"basicDataSource.setMaxActive(50)"
Esta es la que nos permite establecer el número máximo de conexiones activas que puede tener nuestra "piscina", en este caso 50; es decir, que cuando se hayan abierto 50 conexiones no se permitirán abrir más y si la aplicación trata o solicita abrir una nueva, no se le permitirá, sino que tendrá que esperar a que una de las conexiones sea liberada para que la pueda usar. Esta es por así decirlo, la propiedad que identifica este método o forma de conectarnos a una base de datos ya que al no permitir seguir creando más conexiones, aseguramos la estabilidad del sistema en cuanto a recursos y optimización de procesos:
basicDataSource.setDriverClassName("org.gjt.mm.mysql.Driver");
basicDataSource.setUsername(user);
basicDataSource.setPassword(pass);
basicDataSource.setUrl(url);
basicDataSource.setMaxActive(50);

9- Por último lo que hacemos es almacenar en nuestra variable tipo DataSource, la conexión a nuestra base de datos que obtengamos luego de pasar los respectivos parámetros con el objeto de la Clase "BasicDataSource". Esta línea de código, irá después del código del punto anterior y dentro del método mencionado en el punto 6:
dataSource = basicDataSource;

10- En cuanto al código para el test de conexión, copia y pega el código resaltado en verde, dentro del evento y/o método del botón de un formulario de tu proyecto.

11- En las dos primeras líneas de código, lo que hacemos primero es instanciar un objeto de nuestra Clase Pool.java y luego creamos un objeto tipo Connection al cual le asignamos el valor "null" para inicializarlo:
Pool metodospool = new Pool();
java.sql.Connection cn = null;

12- De forma siguiente lo que hacemos es crear un bloque "try-catch-finally". Dentro del "try", lo que haremos será administrar la conexión con nuestra base de datos mediante la variable tipo Connection que creamos en el punto anterior; dicha conexión la obtenemos de la variable tipo DataSource de la Clase Pool, utilizando el método ".getConnection();".
Luego usando un condicional "if", verificamos si nuestra conexión no es nula, y en el caso que se cumpla, mostraremos una ventana con el mensaje "Conectado", en este caso usando el componente "JOptionPane":
try {

     cn=metodospool.dataSource.getConnection();

     if(cn!=null){

        JOptionPane.showMessageDialog(null, "Conectado");

     }

}

13- En la parte del "catch", lo que hacemos es capturar el error y/o excepción que se produzca en caso tal tengamos algún problema en el "try" a la hora de intentar obtener la conexión con nuestra base de datos, por tal motivo este error es del tipo "SQLException" y se guardará en la variable "e", dicho error lo procederemos a imprimir por consola:
catch (SQLException e) {

      System.out.println(e);

}
 
14- En el resto de código, a lo que refiere a la parte del "finally", lo que hacemos es crear un bloque "try-catch", en el cual dentro del "try", procedemos a cerrar y/o liberar la conexión que obtuvimos al principio de este código (punto 12), esto lo logramos usando la variable tipo Connection "cn" y llamando al método ".close();"; en el caso dado que haya una excepción y/o error lo capturaremos en el "catch", esta excepción será también del tipo "SQLException", procedemos a almacenarla en la variable "ex" y a imprimirla por consola. Hay que tener muy presente que lo que haya dentro del bloque "finally", se ejecutará así sea que se cumpla o ejecute la parte del "try" o del "catch":
finally{


       try {

            cn.close();

       } catch (SQLException ex) {

            System.out.println(ex);

       }


}
 
15- Ahora sólo basta con ejecutar tu proyecto y hacer las respectivas pruebas.
 
16- Si deseas saber cómo realizar un Pool de conexiones para conectar una aplicación hecha en Java con una Base de datos, usando un entorno gráfico como Netbeans IDE, puedes visitar el siguiente enlace: 


Si te fue de gran ayuda esta información, no olvides compartirla con tus amigos.
Si tienes dudas o sugerencias al respecto; puedes dejarnos tus comentarios.

Bendiciones...





Comparte este código


7 comentarios:

  1. PARA TENER EN CUENTA:
    La primera línea del bloque de código que explicamos en el punto 8:
    basicDataSource.setDriverClassName("org.gjt.mm.mysql.Driver");
    Actualmente no es necesaria, así que la puedes obviar (eliminarla), ya que el driver se cargará automáticamente; sin embargo, si la dejas o la quitas, el código seguirá funcionando.

    ResponderEliminar
  2. Respuestas
    1. Saludos estimado Jhefferson, gracias por visitar nuestro blog.
      Me alegra que te haya sido de gran ayuda, no olvides compartir nuestro contenido en tus redes sociales.

      ¡CRISTO TE AMA!

      Bendiciones...

      Eliminar
  3. una duda me sale un error en Pool metodospool = new Pool(); dice que Pool es abstracto y no puede ser instanciado

    ResponderEliminar
    Respuestas
    1. Saludo estimado visitante.

      Revisa tu Clase Pool y verifica que en la línea donde colocas el nombre de la Clase (Pool), no tenga la palabra "abstract", en el caso de que la tenga se la quitas.

      Bendiciones...

      Eliminar
  4. Hola Eduardo primero que todo muchas gracias por compartir con nosotros tus conocimientos han sido de mucha utilidad para mi.
    Tengo un problema con el Import org.apache
    me dice que no existe.
    A que se debe y que puedo hacer?
    Gracias

    ResponderEliminar
    Respuestas
    1. Saludo Cordial estimado Cristian.

      Debes de cargar todas las librerías .jar y no las que están comprimidas en .zip; es decir, debes proceder a descomprimir las librerías antes de importarlas a tu proyecto.

      Tus librerías no deben estar así, ej.:
      commons-dcp-1.4.jar.zip

      Deben quedar así, ej.:
      commons-dcp-1.4.jar

      Bendiciones...

      Eliminar