Professional Documents
Culture Documents
sin
ningn
problema.
Una vez que tenemos todo lo anterior procedemos con la instalacin del API de programacin
de Griaule (asumo que el NetBeans y el servidor MySQL ya estn instalados y funcionando sin
problemas). Instalacin del API de programacin de Griaule:: Una vez que hemos
descargado el API tendremos un archivo llamado Fingerprint_SDK_Java_2007_Installer.jar,
para comenzar la instalacin se realiza lo siguiente:
1. Doble clic sobre el archivo, aparecer una ventana que nos pide elegir el idioma,
selecciona el que desees.
2. Posteriormente aparece la pantalla de bienvenida y si se da clic en Siguiente aparecen
los trminos de la licencia, los cuales se debe aceptar para poder continuar.
3. Una vez hecho lo anterior se selecciona la ruta donde se instalar, aqu se dejan los
valores por defecto.
4. Despus de la ruta de instalacin se debe elegir los elementos que se instalarn, de
igual manera se deja todo marcado y se da clic en Siguiente.
Preparacin de las libreras y archivos necesarios:: Una vez que se tiene todo lo anterior
correctamente instalado y configurado se deben de preparar las libreras y los archivos
colocndolos en los directorios que deben de estar, para ello se realiza lo siguiente:
1. Se abre la carpeta de las libreras del API, si se ha dejado por defecto aparecer
enC:\Archivos de programa\Griaule\Fingerprint SDK Java 2007\bin
2. Se copia el archivo grfingerjava.jar hacia las carpetas C:\Archivos de programa\Java\
jdk*\jre\lib\ext (donde jdk* es la versin que tienes instalada, si tienes varias se puede
colocar en todas) y en la carpeta C:\Archivos de programa\Java\ jre*\lib\ext (donde jre*
es la versin ms reciente).
3. Se seleccionan y se copian todos los archivos .dll que se encuentran en la carpeta de
las libreras del API y se pegan en C:\Windows\System32
Preparacin de la base de datos:: Ya realizados los pasos anteriores nicamente nos falta
crear una base de datos que almacene los registros de las huellas, en este caso prepararemos
dentro de dicha base una tabla sencilla que contenga nicamente 3 datos, un ID, el nombre de
la persona y la huella registrada. Para efectos de este ejemplo usaremos una base de datos
de nombre huellas y una tabla dentro de dicha base de nombre somhueque contendr los
datos descritos a continuacin:
1. Nombre de campo: ID , tipo: INT (autoincrement)
2. Nombre de campo: huenombre , tipo: VARCHAR(100)
3. Nombre de campo: huehuella , tipo: BLOB
Ya tenemos todo para comenzar a programar nuestra aplicacin de reconocimiento de huella
digital pero eso lo dejaremos para la siguiente parte. Alguna duda o algo qu decir? Deja tu
comentario.
con
Creamos
un
las
indicaciones,
proyecto
en NetBeans con
haremos
el
lo
siguiente:
nombre EjemploLectorHuellas.
Dentro
de
4.
En
definicin
la
procedimientos
IImageEventListener,
de
la
crear
clase
una
util
IFingerEventListener y
clase
(Java
agregar implements
sus
Class)
llamada Util.
IStatusEventListener,
correspondientes
imports...
import
com.griaule.grfingerjava.FingerprintImage;
import
com.griaule.grfingerjava.IFingerEventListener;
import
com.griaule.grfingerjava.IImageEventListener;
import
com.griaule.grfingerjava.IStatusEventListener;
public
class
IImageEventListener,
Util
implements
IStatusEventListener,
IFingerEventListener{
.
.
5. Al implementar dichas interfaces nos pedirn implementar todos sus mtodos abstractos, lo
hacemos dando un clic en el foco que aparece del lado izquierdo y seleccionando "Implement
all abstract methods" lo cual generar la implementacin de 5 mtodos (modifica el nombre de
los
argumentos
para
mejor
referencia)
el
lector
de
huella
public
void
el
lector
onImageAcquired(String
de
idSensor,
huella
FingerprintImage
un
dedo
en
el
el
lector
dedo
del
lector
Cabe mencionar que no utilizaremos todos los eventos en este ejemplo pero se deben de
implementar para que el compilador no marque errores ya que provienen de una interface.
6. Modificamos los mtodos onSensorPlug y onSensorUnplug para que queden de la
siguiente
manera:
public
void
onSensorPlug(String
idSensor)
try
GrFingerJava.startCapture(idSensor,
}
catch
this,
(GrFingerJavaException
this);
e)
e.printStackTrace();
}
}
public
void
onSensorUnplug(String
idSensor)
try
{
{
GrFingerJava.stopCapture(idSensor);
}
catch
(GrFingerJavaException
e)
e.printStackTrace();
}
}
Lo anterior es para evitar problemas en la captura al momento de conectar y desconectar el
lector,
para
que
el
compilador
no
marque
errores
debemos
importar
las
import
com.griaule.grfingerjava.GrFingerJava;
import
com.griaule.grfingerjava.GrFingerJavaException;
Los dems mtodos que se implementaron deben de quedar vacos (por el momento).
7. Ahora creamos un mtodo esttico que nos permita establecer el directorio de las libreras
del SDK
/**
* Establece el directorio donde se ubican las libreras nativas
del
SDK
*/
public
directorio)
static
void
setFingerprintSDKNativeDirectory(String
{
File
directory
new
File(directorio);
try
GrFingerJava.setNativeLibrariesDirectory(directory);
GrFingerJava.setLicenseDirectory(directory);
}
catch
(GrFingerJavaException
e)
e.printStackTrace();
}
}
y
el
import
de la
clase
File correspondiente:
import
java.io.File;
de
la
clase:
digitales
private
*/
MatchingContext
fingerprintSDK;
/**
Indica
PantallaPrincipal
si
la
plantilla
ui;
template
debe
ser
extrada
automticamente*/
private
/**
Contiene
boolean
localmente
private
/**Contiene
private
autoExtract
los
datos
de
la
huella
ByteArrayInputStream
la
longitud
int
del
true;
capturada
*/
fingerprintData;
dato
de
la
huella*/
fingerprintDataLength;
/**
La
imagen
de
private
/**
ltima
huella
digital
capturada.
FingerprintImage
La
plantilla
de
public
...
la
la
ltima
fingerprint;
imagen
de
huella
capturada
Template
con
sus
*/
*/
template;
correspondientes
imports
...
import
com.griaule.grfingerjava.MatchingContext;
import
interfaz.PantallaPrincipal;
import
java.io.ByteArrayInputStream;
se
crear
en
los
pasos
siguientes.
9. Ahora crearemos la interfaz de usuario, para ello damos clic derecho en el paquete interfaz
y seleccionamos New -> JFrame Form, le damos por nombre 'PantallaPrincipal'.
10. Agregamos dos paneles (Huella Digital y Acciones, como se muestra en la imagen) y 4
botones (Verificar, Identificar, Guardar y Salir) de manera que queden parecido a lo siguiente:
11. Nombramos los botones tal cual su etiqueta pero anteponiendo las letras btn, es
decirbtnVerificar, btnIdentificar y as sucesivamente, el panel de Huella Digital lo
nombramos
'panelContenedor'.
Set
Layout
->
Border
Layout
12. Ya que tenemos lo anterior nos vamos a la vista de cdigo y agregamos los siguientes
objetos...
//Panel
private
//Imagen
private
para
Util
mostrar
JPanel
de
BufferedImage
procedimientosSDK;
la
huella
fingerprintViewPanel
la
digital
=
huella
fingerprintImage
null;
actual
=
null;
...
con
sus
correspondientes
imports
...
import
java.awt.image.BufferedImage;
import
javax.swing.JPanel;
import
procedimientos.Util;
...
los
objetos
deben
ir
dentro
de
la
clase
pero
fuera
de
cualquier
mtodo.
13. Nuevamente modificamos la clase Util agregando un constructor sobrecargado que reciba
un
objeto
de
public
tipo PantallaPrincipal de
la
siguiente
Util(PantallaPrincipal
this.ui
manera:
ui)
ui;
}
14. Por ltimo en la clase Util (por el momento) agregamos un mtodo que nos permita
inicializar
la
captura
de
las
huellas,
deber
de
quedar
as:
/**
* Inicializa el Fingerprint SDK y habilita la captura de huellas.
*/
public
void
inicializarCaptura()
try
fingerprintSDK
//Inicializa
la
{
{
new
MatchingContext();
captura
de
huella
digital.
GrFingerJava.initializeCapture(this);
}
//Si
catch
ocurre
un
(Exception
error
se
e)
cierra
la
aplicacin.
e.printStackTrace();
System.exit(1);
}
}
15. Ahora trabajaremos con la clase PantallaPrincipal, lo que haremos es crear un mtodo
para inicializar la forma, estableciendo el estilo visual y creando una instancia de la clase Util.
Deber
quedar
de
la
siguiente
manera:
/**
* Se establece el estilo visual de la aplicacin y se realiza la
inicializacin
*
de
que
la
contiene
los
clase
procedimientos
principales.
**/
public
void
inicializar()
try
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch
(Exception
e)
//Crea
una
instancia
this.procedimientosSDK
new
de
Util
Util(this);
}
...
su
import
import
correspondiente:
javax.swing.UIManager;
16. Agregamos una llamada al mtodo inicializar() dentro del constructor de la clase y antes
del
/*
mtodo initComponents() de
Crea
una
nueva
public
tal
forma
manera
de
que
quede
PantallaPrincipal
PantallaPrincipal()
as:
*/
{
inicializar();
initComponents();
}
17. Ahora hacemos un mtodo para crear el contenedor de la imagen de la huella digital, en
los
comentarios
se
va
explicando
las
funciones
de
cada
lnea...
/**
* Crea el panel que contendr la imagen de la huella digital
*/
private
//Crea
JComponent
un
panel
crearPanelHuella()
nuevo
para
fingerprintViewPanel
//Se
mostrar
sobreescribe
el
la
new
mtodo
{
huella
JPanel(){
paintComponent
void
paintComponent(Graphics
g)
super.paintComponent(g);
//Si
hay
una
if
imagen
para
ser
mostrada
(fingerprintImage!=null)
pintada
//el tamao es ajustado para que ocupe todo el
tamao
del
Insets
int
int
int width
panel
insets
transX
transY
= getWidth()
=
=
=
getInsets();
insets.left;
insets.top;
- getInsets().right
getInsets().left;
int height = getHeight() - getInsets().bottom getInsets().top;
//Se
dibuja
la
g.drawImage(fingerprintImage,
width,
imagen
transX,
transY,
height,
null);
}
};
//Se
agrega
un
borde
alrededor
fingerprintViewPanel.setBorder(new
new
new
del
panel
CompoundBorder
EmptyBorder
(2,2,2,2),
BevelBorder(BevelBorder.LOWERED)));
de
lo
contrario
null;
devuelve
return
el
panel
mismo
fingerprintViewPanel;
}
}
...
se
agregan
los
imports
correspondientes
para
evitar
errores
...
import
java.awt.Graphics;
import
java.awt.Insets;
import
javax.swing.JComponent;
import
javax.swing.border.BevelBorder;
import
javax.swing.border.CompoundBorder;
import
javax.swing.border.EmptyBorder;
18. Una vez hecho esto nos vamos a la vista de diseo de la clase PantallaPrincipal, sin
seleccionar ningn elemento damos clic derecho sobre el JFrame y posteriormente
seleccionamos Events
...
lo
cual
nos
->
llevar
Window
la
vista
de
WindowActivated ...
->
cdigo
de
la
clase,
dentro
del
private
forma:
void
formWindowActivated(java.awt.event.WindowEvent
evt)
this.panelContenedor.add(crearPanelHuella());
}
19. Ahora creamos el mtodo showImage que nos permitir mostrar la imagen capturada por
el lector en el panel correspondiente. El mtodo debe quedar de la siguiente manera:
/**
Mtodo
utilizado
en
para
mostrar
el
la
imagen
panel
de
la
huella
correspondiente.
*/
public
void
showImage(BufferedImage
image)
dibuja
la
image;
nueva
imagen
repaint();
}
20. Una vez hecho esto vamos a la clase Util y agregamos el cdigo correspondiente al
mtodo onImageAcquired que se ha creado al implementar las interfaces, el mtodo debe
quedar
as:
/**
* Este mtodo es llamado cada vez que la imagen de una huella ha
sido
capturada.
*/
public
void
onImageAcquired(String
idSensor,
FingerprintImage
huellaDigital)
//Almacena
{
la
imagen
de
la
huella
this.fingerprint=huellaDigital;
//Muestra
la
imagen
obtenida
ui.showImage(huellaDigital);
}
21. Ahora en el constructor de la clase PantallaPrincipal agregamos las siguientes 3 lneas:
/*Inicializa
la
captura
de
huellas*/
procedimientosSDK.inicializarCaptura();
/*centra
la
ventana
en
la
pantalla*/
setLocationRelativeTo(null);
/*hace
visible
la
ventana*/
setVisible(true);
22. Agregamos el evento ActionPerformed del botn 'Salir' dando clic derecho sobre l en
vista de diseo y seleccionando Events -> Action -> ActionPerformed y dentro del cdigo
generado
agregamos
el
mtodo dispose();
23. Para que nuestro programa pueda ejecutarse necesitamos mandarlo llamar desde la clase
main, en este caso adems de llamar a la ventana se necesita establecer el directorio de las
libreras,
public
en
conjunto,
el
static
mtodo
main
de
void
String
la
clase
main
main(String[]
grFingerNativeDirectory
debe
quedar
as:
args)
=
{
new
File(".").getAbsolutePath();
Util.setFingerprintSDKNativeDirectory(grFingerNativeDirectory);
PantallaPrincipal
new
PantallaPrincipal();
}
Una vez hecho esto podemos correr la aplicacin con F6 y verificar que realmente funcione, si
has realizado los pasos tal cual podrs, hasta este momento, activar el lector de huellas y
obtener la lectura de la huella que se ha colocado en el lector, an nos falta especificar cmo
verificar, identificar y guardar las huellas pero eso lo dejaremos para la prxima entrega.
Siguiendo con el tutorial para la programacin de un lector de huellas en Java (si no has
ledo la parte 1 y parte 2 te recomiendo hacerlo antes de proceder) en este caso explicar
cmo almacenar los registros de las huellas en una base de datos en MySQL, anteriormente
en la parte 1 hemos creado la base de datos con 3 columnas (el id, los datos de la huella y el
nombre de la persona que la registr) ahora pasemos al cdigo.
Recapitulando...
Se
tienen
nicamente
3
clases
en
el
proyecto:
la
clase ejemplolectorhuellas.Main, interfaz.PantallaPrincipal y procedimientos.
Util, donde Main es a travs de la cual se arranca el programa, PantallaPrincipal es
la interfaz y Util es la clase que contiene los procedimientos.
Al realizar todos los procedimientos de la parte 2 del tutorial y ejecutar el programa
se debe de enceder el lector de huellas, al colocar el dedo sobre el lector debe de
aparecer la imagen de la huella capturada.
Hasta aqu todo bien? Si tu respuesta es afirmativa contina con los siguientes pasos, de lo
contrario regresa a las partes anteriores y verifca que no tengas errores en la codificacin.
Agregar
los
objetos
para
las
consultas
en
procedimientos.Util::
las
consultas/sentencias
que
se
utilizarn
guardarStmt
=
dbConnection.prepareStatement("INSERT
INTO
somhue(id,
huenombre, huehuella) values(?,?,?)");
identificarStmt
=
dbConnection.prepareStatement("SELECT
huehuella
FROM
somhue");
verificarStmt
=
dbConnection.prepareStatement("SELECT huehuella FROM somhue
WHERE huenombre=?");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Cierra la conexin a la base de datos y libera los
recursos empleados.
*/
private void destroyDB() {
try {
//Se cierran todas las sentencias
guardarStmt.close();
identificarStmt.close();
//Cierra la conexin a la base
dbConnection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Las partes en rojo deben ser remplazadas por aquellas que correspondan a tu configuracin
del servidor MySQL. Una vez que tenemos la conexin a la base de datos debemos hacer
que el programa se conecte al inicializar la clase procedimientos.Util, para ello debemos
de agregar una llamada al mtodo initDB() dentro del constructor de la misma para que al
final quede de la siguiente manera:
public Util(PantallaPrincipal ui) {
this.ui = ui;
//Inicializa la conexin a la BD.
initDB();
}
Antes de poder guardar la huella (o la informacin de la huella) en la base de datos
debemos de extraer el llamado Template o plantilla de la huella que es una representacin
matemtica de un mapa de la huella, es importante aclarar que no vamos a guardar la
imagen de la huella sino este mapa a partir del cual se pueden comparar varias huellas o
verificar a quin pertenece, existe la manera de guardar la imagen pero no se realizar dicho
proceso en este tutorial debido a las siguiente razones:
No es seguro tener la imagen de una huella capturada.
Una imagen ocupa muchsimo ms espacio en la base de datos, si se plantea utilizar
para corroborar una considerable cantidad de huellas el proceso se vuelve
inoperable.
3. No es necesario tener la imagen de la huella para compararla con otra, basta con la
plantilla que se extraer.
1.
2.
Una vez aclarado el punto anterior procedamos a extraer la plantilla de la huella capturada
agregando el mtodo extract() a la clase procedimientos.Util de la manera siguiente:
/**
* Extrae la plantilla de la imagen de la huella actual.
*/
public void extract() {
try {
//Extrae la plantilla de la imagen.
template = fingerprintSDK.extract(fingerprint);
//Muestra la plantilla en la imagen
ui.showImage(GrFingerJava.getBiometricImage(template,fingerpr
int));
} catch (GrFingerJavaException e) {
e.printStackTrace();
}
}
Ya que hemos creado el mtodo extract() basta con mandarlo llamar desde el
mtodo onImageAcquired() para que este ltimo quede de la siguiente manera:
public void onImageAcquired(String idSensor, FingerprintImage
huellaDigital) {
//Almacena la imagen de la huella
this.fingerprint=huellaDigital;
//Muestra la imagen obtenida
ui.showImage(huellaDigital);
//Muestra la plantilla en la imagen actual
extract();
}
Una vez hecho lo anterior podemos correr el programa y capturar una huella, notaremos
que se dibujan algunas lneas verdes sobre la misma, dichas lneas son la representacin de
la plantilla que hemos extrado.
Ahora viene la parte donde guardamos la plantilla de la huella en la base de datos. Lo
primero que hacemos es agregar el mtodo guardarHuella() a procedimientos.Util de tal
forma que quede de la siguiente manera:
/*
* Guarda los datos de la huella digital actual en la base
de datos
*/
public void guardarHuella(){
//Obtiene los datos del template de la huella
actual
fingerprintData
=
new
ByteArrayInputStream(template.getData());
fingerprintDataLength = template.getData().length;
//Pregunta el nombre de la persona a la cual
corresponde dicha huella
String
nombre
=
JOptionPane.showInputDialog("Nombre:");
try {
//Establece los valores para la sentencia SQL
guardarStmt.setString(1,"default");
guardarStmt.setString(2,nombre);
guardarStmt.setBinaryStream(3, fingerprintData,
fingerprintDataLength);
//Ejecuta la sentencia
guardarStmt.execute();
} catch (SQLException ex) {
//Si ocurre un error lo indica en la consola
System.err.println("Error al guardar los datos de
la huella.");
ex.printStackTrace();
}
}
Tras realizar lo anterior debemos de realizar import correspondiente a la clase
JOptionPane: import javax.swing.JOptionPane
Lo nico que resta por hacer es mandar llamar el mtodo guardarHuella() por medio del
botn Guardar que aparece en la pantalla principal, para ello nos situamos en la pantalla
principal y damos doble clic sobre el botn Guardar lo cual automticamente nos crea el
mtodo que se efecta al presionar el botn, ahora solo basta mandar llamar el mtodo de la
siguiente manera:
private
void
btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {
procedimientosSDK.guardarHuella();
}
Tras realizar lo anterior, al ejecutar el programa, capturar una huella y presionar el botn
Guardar podremos almacenar los datos de la huella digital en la base de datos y,
posteriormente, podremos realizar operaciones de comparacin y verificacin de
identidades, pero esto lo dejaremos para la siguiente entrega.
Anteriormente hemos visto cmo capturar y guardar huellas digitales en una base de
datos en MySQL (si no sabes a lo que me refiero lee las partes Uno, Dos y Tres de
este tutorial) ahora toca el turno a la verificacin de una identidad por medio de la
huella e identificacin de una persona.
Antes de continuar cabe aclarar(y
con verificacin e identificacin:
diferenciar)
lo
que
me
refiero
*/
public void verify(String nom) {
try {
//Obtiene la plantilla correspondiente a la persona indicada
verificarStmt.setString(1,nom);
ResultSet rs = verificarStmt.executeQuery();
//Si se encuentra el nombre en la base de datos
if (rs.next()){
//Lee la plantilla de la base de datos
byte templateBuffer[] = rs.getBytes("huehuella");
//Crea una nueva plantilla
Template referenceTemplate = new Template(templateBuffer);
//compara las plantilas (actual vs bd)
boolean
fingerprintSDK.verify(template,referenceTemplate);
coinciden
algunas
clases
Ahora solo se debe de agregar una llamada al mtodo verificar() desde el botn
de Verificar en la clase interfaz.PantallaPrincipal, para realizarlo correctamente se
debe dar doble clic sobre el botn y posteriormente agregar el cdigo dentro del
mtodo creado de tal manera que quede as...
private void btnVerificarActionPerformed(java.awt.event.ActionEvent evt)
{
String nombre = JOptionPane.showInputDialog("Nombre a verificar:");
procedimientosSDK.verify(nombre);
}
Si corremos la aplicacin tras realizar lo anterior podremos verificar la huella capturada
actualmente contra otra en la base de datos y el sistema nos indicar si la huella
coincide o no...
Hasta aqu le dejamos en esta parte, si le has entendido correctamente a la lgica del
cdigo no te ser difcil crear el mtodo de identificar(), si lo deseas, puedes esperar a
la prxima entrega en la cual lo explicar paso a paso.
las
Recordemos
que
todos
los
funciones
procedimientos
los
estamos
bsicas.
realizando
en
la
clase
manera:
/**
* Identifica a una persona registrada por medio de su huella digital
*/
public void identificarPersona(){
Ya que tenemos la definicin del mtodo debemos de brindarle un comportamiento pero para
decirle qu hacer primero debemos entenderlo. Para identificar una persona se necesita tomar
una muestra de la huella digital y posteriormente compararla con todas aquellas entre las
cuales se encuentra la persona, en este caso, entre todas las huellas registradas, si
encontramos un registro que coincida entonces tenemos a la persona que buscamos.
En
cdigo
Primero
se
obtenemos
traduce
todas
las
huellas
lo
de
la
base
siguiente:
de
datos...
...posteriormente
iteramos
travs
de
todos
los
resultados...
huella
almacenada...
while(rsIdentificar.next()){
...en
cada
iteracin
obtenemos
la
plantilla
de
la
...y
la
creamos
para
posteriormente
utilizarla...
...ya que tenemos la plantilla de la base de datos la comparamos con la actual almacenando el
resultado
de
la
comparacin
en
una
variable...
if (coinciden){
ui.showImage(GrFingerJava.getBiometricImage(template,
fingerprint,
fingerprintSDK));
JOptionPane.showMessageDialog(ui,
"La
huella
es
de
"+rsIdentificar.getString("huenombre"));
return;
}
JOptionPane.showMessageDialog(ui,
"No
existe
ningn
registro
que
...y
listo!
Al finalizar debemos de encerrar el cdigo entre algunos try-catch para evitar errores al
momento
de
compilar,
el
mtodo
completo
queda
as:
/**
* verifica la huella digital actual contra otra en la base de datos
*/
public void identificarPersona() {
try {
//Obtiene todas las huellas de la bd
ResultSet rsIdentificar = identificarStmt.executeQuery();
templateBuffer[]
rsIdentificar.getBytes("huehuella");
//Crea una nueva plantilla
Template referenceTemplate = new Template(templateBuffer);
coinciden
fingerprintSDK.verify(template,referenceTemplate);
return;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (GrFingerJavaException e) {
e.printStackTrace();
}
}
Posteriormente lo nico que debemos hacer es mandarlo llamar desde el botn de 'Identificar'
y listo! hemos terminado con las 3 funciones principales de un sistema de identificacin de
huellas digitales, solo necesitas adaptar estos mtodos a tu aplicacin y tendrs funcionalidad
total.
El plan no es terminar con esta serie de tutoriales con este artculo sino ahondar en
procedimientos un tanto ms especializados como comparaciones realizadas directamente por
el servidor (en aplicaciones cliente-servidor) para quitar trfico a la red por medio de un
servidor de aplicaciones, sin embargo, espero sus comentarios y opiniones al respecto, y si
tienen alguna consulta dejen su correo para hacerles llegar mi respuesta lo antes posible ya
que
no
he
podido
contestar
los
comentarios
aqu
directamente...
:::Actualizacin:::
A peticin de algunos de ustedes, aqu les dejo una liga para descargar el proyecto en formato
comprimido:
gaso / SingletonJDBC.java
Created on 29 Apr 2013
Code
Revisions1
Embed URL
<script src=
Download Gist
SingletonJDBC.java
Raw
123456789101112131415161718192021222324252627282930313
233343536373839404142434445464748495051525354555657585
960616263646566676869707172737475767778798081828384858
68788899091929394
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.PreparedStatem
ent;
import
java.sql.SQLException;
import
javax.naming.Context;
import
javax.naming.InitialCont
ext;
import
javax.sql.DataSource;
import
javax.swing.JOptionPane
;
/**
*
* @author PCGASO
*/
public class bd {
//Instancia estatica de
la conexion, sino uno
llega a existir
private static
Connection connection
= null;
/**
*
* @return Devuelve
la instancia unica de
Conexion
*/
public static
Connection
getConexion() {
//Si la instancia no
ha sido creado aun, se
crea
if (bd.connection
== null) {
contruyendoConexion();
}
return
bd.connection;
}
//Obtener las
instancias de Conexion
JDBC
private static void
contruyendoConexion()
{
try {
Class.forName("org.post
gresql.Driver");
String url =
"jdbc:postgresql://localh
ost:5432/bd?
allowEncodingChanges=
true";
String usuario =
"postgres";
String clave =
"gidsoft";
bd.connection =
DriverManager.getConn
ection(url, usuario,
clave);
} catch
(ClassNotFoundExceptio
n e) {
System.out.println("Clas
sNotFoundException(co
ntruyendoConexion) : "
+ e.getMessage());
System.gc();
} catch
(SQLException e) {
System.out.println("SQL
Exception(contruyendoC
onexion) : " +
e.getMessage());
System.gc();
JOptionPane.showMessa
geDialog(null,
e.getMessage(), "No fue
Posible Conectar con la
Base de Datos",
JOptionPane.ERROR_ME
SSAGE);
System.exit(0);
} catch (Exception
e) {
System.out.println("
Exception General
(contruyendoConexion)
: " + e.getMessage());
System.gc();
}
}
public static void
liberarConexionS(Conne
ction conex) {
try {
conex.close();
} catch
(SQLException ex) {
System.out.println(esta
dosSQL.getM(ex.getSQL
State(),
ex.getMessage()));
}
}
/**
* Cierra la conexion.
Al provenir de
BasicDataSource, en
realidad no se
* esta cerrando. La
llamada a close() le
indica al
BasicDataSource que
* hemos terminado