Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problema al extraer un dato de un ResultSet

Estas en el tema de Problema al extraer un dato de un ResultSet en el foro de Bases de Datos General en Foros del Web. Hola a todos, es la primera vez que posteo en este foro Bueno tengo un problema. Estoy haciendo un sistema de verificaciòn de Usuario, guardando ...
  #1 (permalink)  
Antiguo 20/12/2006, 06:38
 
Fecha de Ingreso: diciembre-2006
Mensajes: 1
Antigüedad: 17 años, 11 meses
Puntos: 0
Problema al extraer un dato de un ResultSet

Hola a todos, es la primera vez que posteo en este foro

Bueno tengo un problema. Estoy haciendo un sistema de verificaciòn de Usuario, guardando usuarios y sus respectivas contraseñas en una Base de Datos, más especificamente en una tabla "CUENTAS", las contraseñas estan almacenadas con sus respectivos MessageDigest (Hash). Cuando tengo que verificar a un usuario, este me envia su nombre y su password, lo que hace el sistema es lo siguiente:
Primero,

con el nombre que fue enviado, y con select PASSWORD from CUENTAS where NOMBRE = USUARIO, obtengo el messagedigest de la contraseña ( de ese usuario) que esta almacenada en la base de datos.

Segundo,

el password que fue enviado, se envia al mètodo getMessageDigest (String password), con lo cual obtengo el messagedigest de ese password

Tercero,
comparo lo que obtuve en el Primer y Segundo paso, si son iguales la variable boolean acceso sera true, en otro caso sera false.
Mas especificamente :
if ( getMessageDigest(password).equals(tabla.getString( "PASSWORD")) )

En caso de que ambos sean diferentes. el acceso va ser false (que es lo correcto), pero mi gran proble es que en caso que ambos sean iguales la variable acceso seguira siendo false.

Les dejo mi codigo, ojala puedan ayudarme, muchas gracias de antemano por la ayuda que me puedan bridarme.


import javax.swing.*;
import java.security.*;
import java.net.*;
import java.sql.*;

public class Pruebabase {

public static Connection conexion;
public static Statement sentencia;
public static ResultSet tabla;

public Pruebabase () {

establecerConexionABase();

String nombre = JOptionPane.showInputDialog ("Ingresa tu usuario");
String password = JOptionPane.showInputDialog ("Ingresa tu password");

verificarUsuario (nombre,password);

}

public void establecerConexionABase () {

try {

Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
conexion = DriverManager.getConnection( "jdbc:odbc:cuentas","","" );
sentencia = conexion.createStatement();

}
catch( Exception e ) {
return;
}


}//Fin establecerConexionABase



public boolean verificarUsuario(String nombre, String password) {

boolean acceso=false;
System.out.println (nombre+" "+password);

try {


ResultSet tabla = sentencia.executeQuery( "SELECT PASSWORD " +
"FROM CUENTAS WHERE USUARIO = '"+nombre+"' ");


while (tabla.next()) {

/* ACA EMPIEZA MI PROBLEMA:

Al momento de ejecutar las lineas :
System.out.println (getMessageDigest(password) );
System.out.println (tabla.getString("PASSWORD") );
Ambos string son aparentemente iguales.

Algo importante a tomar en cuenta es que puse 2 veces System.out.println (tabla.getString("PASSWORD") ), porque quiero que se den cuenta, que el primero si me ejecuta bien, pero al ejecutar el segundo me bota: java.sql.SQLException No data found

Al parecer cada vez que invoco a getString(), cambia alguna variable interna del sistema, eso dedusco porque el segundo println me lanza la excepcion. Es por ese motivo que los dejo solo en comentarios, porque si no los dejara asi, probablemente la excepcion sea lanzada cuando pase por el if que viene despues.

*/
//System.out.println (getMessageDigest(password) );
//System.out.println (tabla.getString("PASSWORD") );
//System.out.println (tabla.getString("PASSWORD") );
/*
Luego, al pasar por estas lineas :

if ( getMessageDigest(password).equals(tabla.getString( "PASSWORD")) ) {
acceso = true;
}
else acceso = false;

la variable acceso siempre me da false.. cosa muy rara, ya que en los println ambos string son identicos.

He estado buscando informaciòn, por lo que creo que pueda ir la cosa, es por el tabla.next() y por ahi lei que el cursor va cambiando de posición. Pero la verdad estoy muy confundido.
*/
if ( getMessageDigest(password).equals(tabla.getString( "PASSWORD")) ) {
acceso = true;
}
else acceso = false;

}//Fin While

}//Fin try

catch( SQLException e ) {
System.out.println (e);
}

catch( Exception e ) {
System.out.println (e);
}
System.out.println (acceso);
return acceso;

}

public static String getMessageDigest (String textoplano) throws
NoSuchAlgorithmException {

MessageDigest messagedigest = MessageDigest.getInstance("SHA");
messagedigest.update(textoplano.getBytes());
return new String (messagedigest.digest());

}

public static void main (String args[]) {
Pruebabase aplicacion = new Pruebabase();
}

}

Bueno
Saludos
Y de antemano Muchas gracias otravéz
Bye
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:17.