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.
2.- Script.sql contenido del archivo: carga la tabla h2 si no existe y realiza 3 inserts a la bd
3.- Propiedades del archivo de properties para h2:
4.- Finalmente agregamos una nueva dependencia al archivo pom.xml H2 dependency.
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.
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

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.