Ir al contenido principal

Programación de un lector de huella digital en Java. Parte 3.


Siguiendo con el tutorial para la programación de un lector de huellas en Java (si no has leído la parte 1 y parte 2 te recomiendo hacerlo antes de proceder) en este caso explicaré cómo 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 código.

Recapitulando...

  • Se tienen únicamente 3 clases en el proyecto: la clase ejemplolectorhuellas.Maininterfaz.PantallaPrincipal procedimientos.Util, donde Main es a través 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 continúa con los siguientes pasos, de lo contrario regresa a las partes anteriores y verifíca que no tengas errores en la codificación.

Agregar los objetos para las consultas en procedimientos.Util::

Abrimos la clase procedimientos.Util y agregamos al inicio de la misma los siguientes objetos:

   /**Conexión a la base de datos*/
   private Connection dbConnection;
   
   /**Consultas preparadas**/
   private PreparedStatement guardarStmt;
   private PreparedStatement identificarStmt;
   private PreparedStatement verificarStmt;

Los objetos anteriores se utilizarán para crear la conexión a la base de datos y realizar consultas en la misma, para poder realizar lo anterior debemos de crear un par de métodos como se muestran a continuación:

   /**
    * Inicializa la conexión a la base de datos y prepara las operaciones para insertar, 
    * eliminar y modificar los datos
    */
   private void initDB() {
       try {
           //Carga el driver ODBC
           Class.forName("com.mysql.jdbc.Driver");

           //Se conecta a la bd
           dbConnection = DriverManager.getConnection("jdbc:mysql://servidor:3306/huellas","usuario", "contrasena");

           Statement stm = dbConnection.createStatement();
           
           //Prepara las consultas/sentencias que se utilizarán
           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 conexión 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 conexión a la  base
           dbConnection.close();
           
       } catch (Exception e) {
           e.printStackTrace();
       }        
   }

Las partes en rojo deben ser remplazadas por aquellas que correspondan a tu configuración del servidor MySQL. Una vez que tenemos la conexión 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 método 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 conexión a la BD.
       initDB();
       
}

Antes de poder guardar la huella (o la información de la huella) en la base de datos debemos de extraer el llamado Template o plantilla de la huella que es una representación matemática 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 quién pertenece, existe la manera de guardar la imagen pero no se realizará dicho proceso en este tutorial debido a las siguiente razones:

  1. No es seguro tener la imagen de una huella capturada.
  2. Una imagen ocupa muchísimo más 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á.

Una vez aclarado el punto anterior procedamos a extraer la plantilla de la huella capturada agregando el método 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,fingerprint));            
       } catch (GrFingerJavaException e) {
           e.printStackTrace();
       }
       
   }

Ya que hemos creado el método extract() basta con mandarlo llamar desde el método 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 líneas verdes sobre la misma, dichas líneas son la representación de la plantilla que hemos extraído.

Ahora viene la parte donde guardamos la plantilla de la huella en la base de datos. Lo primero que hacemos es agregar el método guardarHuella() 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 método guardarHuella() por medio del botón Guardar que aparece en la pantalla principal, para ello nos situamos en la pantalla principal y damos doble clic sobre el botón Guardar lo cual automáticamente nos crea el método que se efectúa al presionar el botón, ahora solo basta mandar llamar el método 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 botón Guardar podremos almacenar los datos de la huella digital en la base de datos y, posteriormente, podremos realizar operaciones de comparación y verificación de identidades, pero esto lo dejaremos para la siguiente entrega.

¿Alguna duda o algo qué decir? Deja tu comentario. Saludox.

****Actualización (08/08/2012)****
A petición de todos les dejo la lista de todos los artículos de este tutorial.

Comentarios

  1. buenas tades, me ha funcionado hasta donde me pide el nombre de la plantilla extraida de la huella, pero no me guarda nada en la base de datos...estoy usando xampp..agradeceria mucho la yuda

    ResponderBorrar
  2. ke tal yo de nuevo, ya corre bien solo que el guardar la huella genera una exception de q es un desbordamiento me imagino q es el tmanño del buffer no no se a ke se deba aki te pongo el error espero me puedas a yudar gracias.

    Esta es la exception q me arroja:

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
    at com.mysql.jdbc.PreparedStatement.setBinaryStream(PreparedStatement.java:2776)

    ResponderBorrar
  3. Qué tal,

    El error que te aparece es por que estás utilizando un arreglo y en algún momento estás tratando de acceder a una posición que está fuera del rango del mismo, es decir, si tu arreglo tiene un tamaño de 2 e intentas acceder a la posición 3, te va a dar esta excepcion.

    Saludox.

    ResponderBorrar
  4. Buenas noches, una pregunta
    Porqué donde haces el INSERT
    "INSERT INTO somhue(id, huenombre, huehuella) values(?,?,?)"

    escribes en values los signos de interrogación???
    oO
    Gracias =D

    ResponderBorrar
  5. HOLA BUENAS TARDES TENGO UN PROBLEMA AL HORA DE GUARDAR LA HUELLA ME MANDA UN ERROR
    java.sql.SQLException: Incorrect integer value: 'default' for column 'id' at row 1
    Y YA ESTAD RE VISANDO TODO Y NO SE POR QUE ME MARKA ESTO NO SE SI TENGA ALGO QUE VER KON LO DE LOS VALUES (?,?,?)
    AGRADECERIA ME CONTESTARAS

    ResponderBorrar
  6. me funciono muy bien gracias por lo detallado del codigo

    ResponderBorrar
  7. Cordial saludo...

    al ejecutar el programa luego de haber terminado la parte 2 este me ejecuta sin errores pero no me captura la huella o por lo menos no me la muestra.

    ademas mi lector de huella siempre esta encendido... asi el programa no se este ejecutando...

    ResponderBorrar
  8. disculpa que te moleste pero podrias publicar el link para descargar el paquete de la huella digital en java

    ResponderBorrar
  9. Hola, oye disculpa todo me funciona bien, pero al guardar en la base de datos no me guarda nada. Estoy utilizando xampp, agradecería mucho que me ayudaras

    ResponderBorrar
  10. Qué tal,

    Te aparece algún mensaje de error? Recuerda que el id de la tabla debe ser autoincrementable...

    Saludox

    ResponderBorrar
  11. Hola Luis,

    Me interese bastante en su articulo para la programación en Netbeans de un lector de huellas con motor de bases MySQL y he tratado de implementarlo, pero he topado con un error que aún no podido descifrar y sería de mucha ayuda su opinión.

    El error es básicamente este:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at procedimientos.Util.guardarHuella(Util.java:203)

    esta linea es la:

    guardarStmt.setString(1,"default");

    en donde voy agregando los valores para luego realizar el INSERT!, algo pasa con el atributo :

    private PreparedStatement guardarStmt;

    Espero que pueda colaborarme pues estoy sumamente interesado en el desarrollo completo de la aplicación.

    De antemano muchas gracias y si es posible estaremos en contacto...

    Nicolas Gutiérrez G.

    ResponderBorrar
  12. Hola Morillo,

    felicitaciones por el tutorial.

    me llamo JuanPablo, estuve probando paso a paso tu aplicacion,yo utlizo netbeans 7.0.1 con dispositivo secugen hamster plus y el Fingerprint SDK 2009(compre la licencia), me va bien, corre le programa, ingreso y veo la huella digital pero cuando quiero guardar la imagen me arroja este error:

    init:
    Deleting: C:\Users\PABLO\Documents\EjemploLectorHuellas\build\built-jar.properties
    deps-jar:
    Updating property file: C:\Users\PABLO\Documents\EjemploLectorHuellas\build\built-jar.properties
    compile:
    run:
    Error al guardar los datos de la huella.
    java.sql.SQLException: Incorrect integer value: 'default' for column 'id' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364)
    .
    .
    .

    Estuve leyendo post de usuarios pasados, y pensaba que tambien era algun error por bases de datos como, activar el autoincrement. probe tambien agregando campos en 'duro' a la base de datos. pero no me ha dado resultado . Tengo dias con esto y quisisera pidirte tu apoyo. porsiacso te dejo mi correo jpablo.sg@hotmail.com

    saludos y exitos

    ResponderBorrar
  13. Qué tal Juan Pablo,

    Intenta cambiar la línea guardarStmt.setString(1,"default"); por guardarStmt.setInt(1,1); para verificar que no haya problemas en la sentencia sql, de igual manera te recomiendo que descargues el proyecto terminado para que lo pruebes y me comentes si te sucede lo mismo. La liga para descargarlo puedes encontrarla en la parte 5 del tutorial.

    Saludos.

    ResponderBorrar
  14. Hola Morillo,

    gracias por responder

    realize lo que me dijistes y si me llego a funcionar. gracias!

    Pero ahora me e visto en la tarea de poder ejecutarlo por web. entonces para esto se me ocurrio 2 ideas: crear un jar. ejecutable y crear un servlet( java o php) que invoque al jar. y luego me retorne los bytes de la imagen para dibujarlo, pero como no se mucho manejo de servlet(java) lo deje de lado y opte por crear un applet(tambien soy novato en applet, lei que sugieren en post anteriores) pero si es cierto que el ejemplo sirve de guia para hacer uno en applet, son casos diferentes por ejemplo el JFrame tiene el evento formWindowActivated cosa que el JApplet no existe. otro caso es que en tu ejemplo tienes un main donde invocas el constructor del JFrame y luego llamas a una funcion inicializar().... pero en JApplet no existe un main solo he visto que hay un metodo 'run'.

    a pesar de estas dudas me aventure a crear el proyecto del applet y me arrojo este error.

    run:
    Exception in thread "Thread-5" java.lang.UnsupportedOperationException: Not supported yet.
    at procedimientos.Util.onFingerUp(Util.java:94)
    at com.griaule.grfingerjava.GrFingerJavaNative.callbackFinger(GrFingerJavaNative.java:180)

    espero me puedas dar una mano con este tema.
    Juan Pablo

    ResponderBorrar
  15. Qué tal,

    Verifica que en la línea 94 de Util.java no estés mandando manualmente la excepción.

    Saludos.

    ResponderBorrar
  16. Oye amigo, gracias por el tutorial, es de mucha ayuda, mi duda es que cuando corro mi programa no me muestra la captura de la huella, como en el tutorial 2, me dici que se ha producido un error y me cierra el programa, falta archivo:
    ystem.IO.FileNotFoundException: Could not load file or assembly 'GriauleFingerprintLibrary, Version=1.1.0.2, Culture=neutral, PublicKeyToken=0cd8a94f71f97144' or one of its dependencies. El sistema no puede hallar el archivo especificado.
    File name: 'GriauleFingerprintLibrary, Version=1.1.0.2, Culture=neutral, PublicKeyToken=0cd8a94f71f97144'

    ResponderBorrar
  17. Qué tal,

    ¿Qué versión del SDK estás utilizando?

    ResponderBorrar
  18. Fingerprint SDK Java 2009, el de la version trial

    ResponderBorrar
  19. Te recomiendo utilizar el que se indica en este tutorial que es la versión 2007, puedes descargarlo desde aquí:
    http://min.us/mvfrHo#1o

    Saludos.

    ResponderBorrar
  20. Hola que tal.

    en esta parte se queda asi o hay que agregar un directorio????

    String grFingerNativeDirectory = new File(".").getAbsolutePath(; Util.setFingerprintSDKNativeDirectory(grFingerNativeDirectory);

    y no me esta reconociendo las capturas de la huellas...

    Saludos..

    ResponderBorrar
  21. Qué tal,
    La línea va así como la indicas (terminando en ();), te aparece algún error al momento de capturar la huella?

    ¿Qué versión del SDK y modelo de lector estás utilizando?

    ResponderBorrar
  22. La FingerPrint SDK 2007 y el lector es digitalpersona u 4500, de igual forma corro los ejemplos del SDK y no me reconoce las capturas de lahuella, ademas tengo los .dll en system32 y no se que esta pasando.

    ResponderBorrar
  23. Entiendo,

    Este SDK tiene problemas en ocasiones con ese modelo de lector, me parece que el compatible sería el SDK 2009, sin embargo, el código del tutorial no se adapta completamente a esta última versión por lo que tienes 2 opciones:

    1) Utilizar un lector compatible con el SDK 2007
    2) Ajustar el código del SDK 2009 para que realice las funciones

    Pronto publicaré un tutorial para la versión 2009, de momento, tus opciones son las anteriores. Saludos.

    ResponderBorrar
  24. Hola buenos dias.

    temgo el siguiente problema con mi aplicacion,
    mi problema es en el momento de estraer el template de la huella para guardarlo, me sale la siguiente excepcion:

    Exception in thread "Thread-4" java.lang.UnsatisfiedLinkError: com.griaule.grfingerjava.GrFingerJavaNative.GrExtract([BIII[B[III)I
    at com.griaule.grfingerjava.GrFingerJavaNative.GrExtract(Native Method)
    at com.griaule.grfingerjava.MatchingContext.extract(MatchingContext.java:196)
    at com.griaule.grfingerjava.MatchingContext.extract(MatchingContext.java:171)
    at com.griaule.fingerprintsdk.sample.Util.extract(Util.java:601)
    at com.griaule.fingerprintsdk.sample.Util.onImageAcquired(Util.java:194)
    at com.griaule.grfingerjava.GrFingerJavaNative.callbackImage(GrFingerJavaNative.java:157)

    espero que me puedas ayudar....

    ResponderBorrar
  25. Qué tal,

    Verifica que todos los dll's se encuentren en el directorio correcto (lee nuevamente la parte 1 del tutorial para ver la configuración).

    Si el problema sigue ayudaría que me indicaras qué sistema operativo tienes, qué versión del SDK estás utilizando y cuál es el modelo del lector.

    Saludos.

    ResponderBorrar
  26. ya reconoce el lector, pero no prende, no se activa. asi no puedo realizar capturas....

    ResponderBorrar
  27. Qué tal,

    - ¿Qué sistema operativo tienes?
    - ¿Qué versión del SDK estás utilizando?
    - ¿Qué modelo de lector utilizas?

    Saludos.

    ResponderBorrar
  28. SO XP, FingerPrint SDK 2009 y el lector es digitalPersona u4500, anteriormente si funcionaba el ejemplo del SDK, captura y muestra todo bien, pero al reiniciar mi pc ya no prendio el lector.

    ResponderBorrar
  29. Qué tal,

    Te comento que el tutorial está orientado al SDK 2007, en este caso no tengo las bases para tratar de identificar la raíz de tu problema dado que utilizas el 2009, te recomiendo que te des una vuelta por la página de soporte de Griaule y verifiques si hay soluciones a problemas como el que presenta tu app.

    Lamento no poder ayudarte más allá. Saludos.

    ResponderBorrar
  30. Hola Luis me encuentro trabajando e la aplicacion de huella con java 6.9.1
    y SDK 2007 Windows XP y 7 y al ejecutar el formulario me envia el siguiente error y ya revise hice los pasos como se indican te agradezco en lo que me puedas colaborar el lector es Marca Microsoft.



    Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: com.griaule.grfingerjava.GrFingerJavaNative.GrInitialize()I
    at com.griaule.grfingerjava.GrFingerJavaNative.GrInitialize(Native Method)
    at com.griaule.grfingerjava.MatchingContext.createContext(MatchingContext.java:58)
    at com.griaule.grfingerjava.MatchingContext.(MatchingContext.java:103)
    at procedimientos.Util.inicializarCaptura(Util.java:131)
    at interfaz.PantallaPrincipal.(PantallaPrincipal.java:50)
    at interfaz.Menu.jMenuItem1ActionPerformed(Menu.java:131)
    at interfaz.Menu.access$000(Menu.java:20)
    at interfaz.Menu$1.actionPerformed(Menu.java:53)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)
    at java.awt.Component.processMouseEvent(Component.java:6289)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6054)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4652)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4482)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4482)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
    at java.awt.EventQueue.access$000(EventQueue.java:85)
    at java.awt.EventQueue$1.run(EventQueue.java:603)
    at java.awt.EventQueue$1.run(EventQueue.java:601)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:617)
    at java.awt.EventQueue$2.run(EventQueue.java:615)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

    ResponderBorrar
  31. Qué tal,

    Al parecer es un problema con las dll's, verifica que lo indicado en la parte 1 del tutorial esté realizado al 100%.

    Saludos.

    ResponderBorrar
  32. Hola Luis me podrias indicar si el SDK 2007 es compatible con este lector Huellero marca Futronic, modelo F580


    Gracias

    ResponderBorrar
  33. Gracias Luis ya consegui la compatibilidad de lectores con SDK 2007 mando el link quizas sea util a alguien

    http://www.biometriaaplicada.com/Griaule-pdf/Fingerprint-SDK.pdf

    ResponderBorrar
  34. SOLUCIÓN AL SIGUIENTE ERROR: java.sql.SQLException: Incorrect integer value: 'default' for column 'id' at row 1
    HACER LO SIGUIENTE:
    1.- CAMBIAR LA LINEA guardarStmt.setString(1,"default"); POR guardarStmt.setInt(1,0);

    LISTO!! YA TE DEBE FUNCIONAR.

    ResponderBorrar
  35. ...ahh olvidaba mencionar en el anterior comentario que el campo id de la tabla del proyecto debe ser int not null auto_increment

    ResponderBorrar
  36. Estimado, por favor ayudenos publicando nuevamente la libreria de FingerPrint SDK 2007 pues el link que usted publica no permite descargar el archivo nos sera de gran ayuda para todos.

    ResponderBorrar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.