Recent comments

H2 la base de datos de prueba con javase y configuración

H2 la base de datos de prueba con javase y configuración.



El objetivo es configurar la bd h2 para pruebas, mediante  pool de conexiones, y archivo properties.

Estructura del proyecto:




1.- TestPool, clase que ejecuta la prueba del script de bd, prácticamente se encarga de pedir el objeto connection a la clase PoolConexion, ejecutar las operaciones y devolver la conexion al pool.


package com.tx.conexion;

import java.sql.*;
import java.io.*;

public class TestPool {

    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            //Probamos el pool de H2 y ejecutamos una consulta
            conn = PoolConexion.getConexion();
     //ejecutamos consultas normalmente
            stmt = conn.prepareStatement("SELECT * FROM alumnos");
            rs = stmt.executeQuery();
            while (rs.next()) {
                System.out.print(" " + rs.getInt(1));// id_persona
                System.out.print(" " + rs.getString(2));// nombre
                System.out.println();
            }
            //Cerramos la conexion para regresarla al pool
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
    
}


2.- Script.sql contenido del archivo: carga la tabla h2 si no existe y realiza 3 inserts a la bd


---SCRIPT PARA CREAR LA TABLA
CREATE TABLE IF NOT EXISTS
    alumnos(
     id int not null auto_increment,
     nombre varchar(55) not null,
     primary key (id)
);

--INSERTS
insert into alumnos values (null,'BERENICE');
insert into alumnos values (null,'ANA');
insert into alumnos values (null,'MARIA');

3.- Propiedades del archivo de properties para h2:


#H2
jdbc.driver = org.h2.Driver
#Opcion para guardar en un archivo segun la ruta especificada por default home
#jdbc.url = jdbc:h2:~/test;
#Opcion para usar solo en memoria
jdbc.url = jdbc:h2:mem:~/test;
jdbc.user = sa
jdbc.pass =

4.- Finalmente agregamos una nueva dependencia al archivo pom.xml H2 dependency.



<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tx</groupId>
<artifactId>tx-jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
  <dependency>
   <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
    <scope>system</scope>
        <systemPath>${basedir}/src/lib/mysql-connector-java-8.0.16.jar</systemPath>
  </dependency>
  <dependency>
        <groupId>oracle</groupId>
        <artifactId>oracle-connector-java</artifactId>
        <version>18c</version>
        <scope>system</scope>
        <systemPath>${basedir}/src/lib/ojdbc8.jar</systemPath>
    </dependency>
    <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.199</version>
    </dependency>
</dependencies>
</project>


5.- La clase PoolConexion: la cual se encarga de carga el pool y cargar la bd en memoria o en un arhivo según se haya especificado en el archivo properties, de este modo, cuando ya este cargado el script ya se pueda mandar a llamar para realizar operaciones.

package com.tx.conexion;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

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

public class PoolConexion {
    
    private static BasicDataSource ds;

    public static DataSource getDataSource() {
        if(ds == null) {
            try {
                Properties p = new Properties();
                InputStream fie;
                fie = new FileInputStream("src/main/resources/config.properties");
                p.load(fie);
                ds = new BasicDataSource();
                ds.setDriverClassName(p.getProperty("jdbc.driver"));
                ds.setUsername(p.getProperty("jdbc.user"));
                ds.setPassword(p.getProperty("jdbc.pass"));
                ds.setUrl(p.getProperty("jdbc.url"));
                //Definimos el tamano del pool de conexiones
                ds.setInitialSize(5);// 5 Conexiones iniciales
                fie.close();
                if(p.getProperty("jdbc.driver").contains("org.h2.Driver")) {
                    Connection conn = ds.getConnection();
                    PreparedStatement stmt = null;
                    stmt = conn.prepareStatement(leerSqlFile());
                    stmt.execute(); 
                    stmt.close();
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return ds;
    }

    public static Connection getConexion() throws SQLException {
        return getDataSource().getConnection();
    }
    
//Cierre del resultSet
public static void close(ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}

//Cierre del PrepareStatement
public static void close(PreparedStatement stmt) {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}

//Cierre de la conexion
public static void close(Connection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
    /**
* lee el archivo
* @return String
*/
private static String leerSqlFile() {
byte[] buffer = null;
File file = new File("src/main/resources/script.sql");
buffer = new byte[(int) file.length()];
BufferedInputStream f = null;
try {
f = new BufferedInputStream(new FileInputStream("src/main/resources/script.sql"));
f.read(buffer);
f.close();
} catch (Exception e) {
    e.printStackTrace();
        }
return new String(buffer);
}

}


A partir de ahora ya puedes ejecutar la clase PoolTest, la cual a travez del pool de conexión de apache proporcionará el objeto connection y se ejecutará el script de BD.

Código Fuente





No hay comentarios.