Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package application.bbdd; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import java.util.logging.Logger; import javax.swing.JOptionPane; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; /** * * @author nacho */ public class pool { /* Pool de conexiones */ public static BasicDataSource dataSource; private static final Logger log = Logger.getLogger("ejemplo2"); public static void inicializa_BasicDataSourceFactory() { Properties propiedades = new Properties(); /* setMaxActive(): N mx de conexiones que se pueden abrir simultneamente. setMinIdle(): N mn de conexiones inactivas que queremos que haya. Si el n de conexiones baja de este n, se abriran ms. setMaxIdle(): N mx de conexiones inactivas que queremos que haya. Si hay ms, se irn cerrando. */ propiedades.setProperty("driverClassName", "com.mysql.jdbc.Driver"); propiedades.setProperty("url", "jdbc:mysql://127.0.0.1:3306/application"); propiedades.setProperty("maxActive", "10"); propiedades.setProperty("maxIdle", "8"); propiedades.setProperty("minIdle", "0"); propiedades.setProperty("maxWait", "500"); propiedades.setProperty("initialSize", "5"); propiedades.setProperty("defaultAutoCommit", "true"); propiedades.setProperty("username", "root"); propiedades.setProperty("password", "1234"); propiedades.setProperty("validationQuery", "select 1"); propiedades.setProperty("validationQueryTimeout", "100"); propiedades.setProperty("initConnectionSqls", "SELECT 1;SELECT 2"); propiedades.setProperty("poolPreparedStatements", "true"); propiedades.setProperty("maxOpenPreparedStatements", "10"); try { //propiedades.load(new FileInputStream("src/config/datasource_config.properties")); dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(propiedades); } catch (Exception e) { JOptionPane.showMessageDialog(null, e.toString()); } } public static void realizaConsulta1() { Connection conexion = null; Statement sentencia = null; ResultSet rs = null; try { // BasicDataSource nos reserva una conexion y nos la devuelve conexion = getConexion(); sentencia = conexion.createStatement(); rs = sentencia.executeQuery("select count(*) from user"); rs.next(); JOptionPane.showMessageDialog(null, "El numero de usuarios es: " + rs.getInt(1)); logStatistics(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, e.toString()); } finally { try { rs.close(); sentencia.close(); liberaConexion(conexion); } catch (Exception fe) { JOptionPane.showMessageDialog(null, fe.toString()); } } } public static void realizaConsulta2() { Connection conexion = null; Statement sentencia = null; ResultSet rs = null; try { conexion = getConexion(); sentencia = conexion.createStatement(); rs = sentencia.executeQuery("select count(*) from db"); rs.next(); JOptionPane.showMessageDialog(null, "El numero de bd es: " + rs.getInt(1)); logStatistics(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, e.toString()); } finally { try { rs.close(); sentencia.close(); liberaConexion(conexion); } catch (Exception fe) { JOptionPane.showMessageDialog(null, fe.toString()); } } } public static Connection getConexion() { Connection conexion = null; try { conexion = dataSource.getConnection(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, e.toString()); } return conexion; } public static void liberaConexion(Connection conexion) { try { if (null != conexion) // En realidad no cierra, solo libera la conexion. conexion.close(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, e.toString()); } } public static void logStatistics() { log.info("active: " + dataSource.getNumActive() + " (max: " + dataSource.getMaxActive() + ") " + "idle: " + dataSource.getNumIdle() + " (max: " + dataSource.getMaxIdle() + ")\n"); } }