-
Notifications
You must be signed in to change notification settings - Fork 15
/
DbManager.java
144 lines (122 loc) · 4.36 KB
/
DbManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/* Copyright (C) 2017 [Gobierno de Espana]
* This file is part of FIRe.
* FIRe is free software; you can redistribute it and/or modify it under the terms of:
* - the GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License, or (at your option) any later version.
* - or The European Software License; either version 1.1 or (at your option) any later version.
* Date: 08/09/2017
* You may contact the copyright holder at: soporte.afirma@correo.gob.es
*/
package es.gob.fire.signature;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Manejador para la conexión a la base de datos.
*/
public class DbManager {
private static final Logger LOGGER = Logger.getLogger(DbManager.class.getName());
private static String dbConnDriver = null;
private static String dbConnString = null;
private static Connection conn = null;
static {
conn = initialize();
}
/**
* Inicializa al completo el manejador de base de datos, leyendo el fichero
* de configuración y recuperando la conexión.
* @return Conexión de base de datos o null si se produce un error.
*/
private static Connection initialize() {
// Cargamos el driver JDBC
try {
dbConnDriver = ConfigManager.getJdbcDriverString();
if (dbConnDriver == null) {
LOGGER.log(
Level.SEVERE,
"No se ha declarado la clase del driver JDBC a la BD en el fichero de configuracion"); //$NON-NLS-1$
return null;
}
dbConnString = ConfigManager.getDataBaseConnectionString();
if (dbConnString == null) {
LOGGER.log(
Level.SEVERE,
"No se ha declarado la cadena de conexion a la BD en el fichero de configuracion"); //$NON-NLS-1$
return null;
}
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, "Error al crear la conexion con la base de datos", e); //$NON-NLS-1$
return null;
}
return initConnection();
}
/**
* Inicializa la conexión de base de datos para la configuración de base de datos
* previamente cargada.
* @return Conexión de base de datos o null si se produce un error.
*/
private static Connection initConnection() {
try {
Class.forName(dbConnDriver).newInstance();
return DriverManager.getConnection(dbConnString);
}
catch (final Exception e) {
LOGGER.log(Level.SEVERE, "Error al crear la conexion con la base de datos", e); //$NON-NLS-1$
return null;
}
}
/**
* Obtiene la conexión de base de datos.
* @return Conexión de base de datos o {@code null} si no se pudo conectar.
*/
private static Connection getConnection() {
try {
if (conn != null && !conn.isValid(2)) {
LOGGER.warning("La conexion con base de datos ha dejado de ser valida"); //$NON-NLS-1$
conn = null;
}
} catch (final SQLException e) {
LOGGER.warning("La conexion con base de datos no es valida: " + e); //$NON-NLS-1$
conn = null;
}
if (conn == null) {
LOGGER.info("Se reinicia la conexion con base de datos, volviendo a cargar el fichero de configuracion"); //$NON-NLS-1$
conn = initialize();
}
return conn;
}
/**
* Cierra la conexión con la base de datos.
* @throws SQLException Cuando ocurre un error al cerrar la conexión.
*/
public static void close() throws SQLException {
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
/**
* Prepara una sentencia SQL para ser ejecutada.
* @param statement Sentencia SQL.
* @return Sentencia SQL.
* @throws SQLException Cuando se produce un error al preparar la sentencia.
* @throws DBConnectionException Cuando no se ha podido inicializar la conexion con base de datos.
*/
public static PreparedStatement prepareStatement(final String statement) throws SQLException, DBConnectionException {
final Connection c = getConnection();
if (c == null) {
throw new DBConnectionException("No se ha encontrado una conexion abierta contra la base de datos"); //$NON-NLS-1$
}
return c.prepareStatement(statement);
}
/**
* Indica si la conexión a base de datos esta conigurada y puede usarse.
* @return {@code true} si la conexión a base de datos puede usarse.
* {@code false} en caso contrario.
*/
public static boolean isConfigured() {
return conn != null;
}
}