Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] comparar 2 variables string en un if

Estas en el tema de comparar 2 variables string en un if en el foro de Java en Foros del Web. saludos amigos estoy realizando una aplicacion en la cual yo obtengo valores de una base de datos y los comparo con lo que escribo en ...
  #1 (permalink)  
Antiguo 12/08/2013, 22:33
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 11 años, 3 meses
Puntos: 0
Información comparar 2 variables string en un if

saludos amigos estoy realizando una aplicacion en la cual yo obtengo valores de una base de datos y los comparo con lo que escribo en las cajas de texto el siguiente codigo si me correo bien:
Código:
if((usuario.equals("Administrator"))&&(password.equals("T0g3th3r2013"))){
              
              /*crea un objeto de la ventana Cuenta y
               *abre la ventana al presionar el boton Entrar
               */
               Cuenta AbrirVentanaCuenta=new Cuenta();
               AbrirVentanaCuenta.setVisible(true);
               
              /*crea un objeto de la ventana Administrador y
               *abre la ventana al presionar el boton Entrar
               */
               Administrador AbrirVentanaPrestatario=new Administrador();
               AbrirVentanaPrestatario.setVisible(true);        
               
           }//termina if
           else{
              /*despliega mensaje de advertencia en caso de tratar de logearse 
               *como administrador utilizando usuario o contraseña invalidos
               */
              JOptionPane.showMessageDialog(null,"Error al logearse como administrador\nUsuario y/o Contraseña No Validos!!!");
           }//termina else
en el cuerpo del if compar lo que escribi en las cajas de texto guardadas en avriables string contra cadenas de texto a modo de usuario y contraseña ya lo probe y si me funciona si son correctos me abre las ventaans correspondientes si no el else me despliega un mensaje de alerta.

ahora el prblema esta en el siguiente codigo:

Código:
if(idprestadorObt.equals(idprestador) && usuarioObt.equals(usuario) && passwordObt.equals(password)){
              //aqui mi codigo
              }//termina if
              else{
                 /*despliega mensaje de advertencia en caso de tratar de logearse 
                  *como prestatario utilizando usuario o contraseña invalidos
                  */ 
                 JOptionPane.showMessageDialog(null,"Error al logearse como prestatario\nUsuario y/o Contraseña No Validos!!!");
              }//termina else
comos e dan cuenta las variables idprestadorObt,usuarioObt,passwordObt almacenan valores que yo extraje de la base de datos a traves de procedimientos almacenados en postgres esto ya lo prove desplegando los valores en un mensaje de alerta y si lo hace pero igual que el codigo anterior quiero hacer un logeo comparando 3 variables como se ve en el encabezado del if pero a la hora de ejecutar yo ingreso los valores correctos presiono el boton de aceptar y en vez de ejecutar el cuerpo del if ejecuta el else ¿que puede ser? no hallo el error si pudieran ayudarme se los agradecere.
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #2 (permalink)  
Antiguo 13/08/2013, 04:03
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 10 meses
Puntos: 22
Respuesta: comparar 2 variables string en un if

¿En el IF con dos condiciones te funciona bien? ¿y con tres no?

Puede poner un ejemplo de la condición que estás poniendo??
debería funcionarte bien, imprime el valor de las variables previamente al IF para verificar que las variables contienen los valores que esperas.
  #3 (permalink)  
Antiguo 13/08/2013, 05:32
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Respuesta: comparar 2 variables string en un if

de hecho ya lo hice y si me imprmime las variables es mas coloco todo el codigo de el boton esta largo de echo espero que le puedan entender ya esta comentado:

Código:
/*variables para la obtencion y alamcenamiento de datos ingresados
         *por medio de las cajas de texto dispuestas en la GUI
         */
        String idprestador="";
        String usuario="";
        String password="";
        
        idprestador=txtIdPrestador.getText();
        usuario=txtUsuario.getText();
        password=txtPassword.getText();
        
        /*testea si el boton radial para el administrador a sido seleccionado 
         *de ser cierto se ejecutara el codigo de su cuerpo al presionar 
         *el boton de Entrar
         */ 
        if(rdbAdministrador.isSelected()){
           
           /*se asegura que los datos de logeo como administrador sean
            *correctos para poder mostrar las ventanas correspondientes
            */
           if((usuario.equals("Administrator"))&&(password.equals("T0g3th3r2013"))){
              
              /*crea un objeto de la ventana Cuenta y
               *abre la ventana al presionar el boton Entrar
               */
               Cuenta AbrirVentanaCuenta=new Cuenta();
               AbrirVentanaCuenta.setVisible(true);
               
              /*crea un objeto de la ventana Administrador y
               *abre la ventana al presionar el boton Entrar
               */
               Administrador AbrirVentanaPrestatario=new Administrador();
               AbrirVentanaPrestatario.setVisible(true);        
               
           }//termina if
           else{
              /*despliega mensaje de advertencia en caso de tratar de logearse 
               *como administrador utilizando usuario o contraseña invalidos
               */
              JOptionPane.showMessageDialog(null,"Error al logearse como administrador\nUsuario y/o Contraseña No Validos!!!");
           }//termina else
            
        }//termina if
        
        /*testea si el boton radial para el prestatario a sido seleccionado 
         *de ser cierto se ejecutara el codigo de su cuerpo al presionar 
         *el boton de Entrar
         */
        if(rdbPrestatario.isSelected()){
           
           try{
              
              //variables para almacenar valores obtenidos en cada procedimiento
              String idprestadorObt="";
              String usuarioObt="";
              String passwordObt="";
              
//<---------------------------------------------------------------------------->
              //__________________________________________________________//
              //--------inicia codigo para la obtencion del id--------//
              //prepara la funcion a ejecutar 
              pctoIdPrestatario=conexion.prepareCall("{call obtener_idprescuen(?)}");
              //se introduce el parametro en el procedimiento
              pctoIdPrestatario.setString(1, idprestador);
              //--------termina codigo para la obtencion del id--------//
              //___________________________________________________________//
//<---------------------------------------------------------------------------->              
              //__________________________________________________________//
              //--------inicia codigo para la obtencion del usurio--------//
              //prepara la funcion a ejecutar 
              pctoUsuario=conexion.prepareCall("{call obtener_user(?)}");
              //se introduce el parametro en el procedimiento
              pctoUsuario.setString(1, usuario);
              //--------termina codigo para la obtencion del usurio--------//
              //___________________________________________________________//
//<---------------------------------------------------------------------------->
              //____________________________________________________________//
              //--------inicia codigo para la obtencion del password--------//
              //prepara la funcion a ejecutar 
              pctoPassword=conexion.prepareCall("{call obtener_pass(?)}");
              //se introduce el parametro en el procedimiento
              pctoPassword.setString(1, password);
              //--------termina codigo para la obtencion del password--------//
              //_____________________________________________________________//
//<---------------------------------------------------------------------------->
              
              /*recorre los registros para la busqueda del id por
               *el procedimiento almacenado obtener_idprescuen()
               */
              resultado=pctoIdPrestatario.executeQuery();
              while(resultado.next()){
               idprestadorObt=idprestadorObt+resultado.getString(1);
              }//termina while
              
              /*recorre los registros para la busqueda del usuario por
               *el procedimiento almacenado obtener_user()
               */
              resultado=pctoUsuario.executeQuery();
              while(resultado.next()){
               usuarioObt=usuarioObt+resultado.getString(1);
              }//termina while
              
              /*recorre los registros para la busqueda del password por
               *el procedimiento almacenado obtener_pass()
               */
              resultado=pctoPassword.executeQuery();
              while(resultado.next()){
               passwordObt=passwordObt+resultado.getString(1);
              }//termina while
              
//<---------------------------------------------------------------------------->
              
              if((idprestadorObt.equals(idprestador)) && (usuarioObt.equals(usuario)) && (passwordObt.equals(password))){
                 JOptionPane.showMessageDialog(null,"id: "+idprestadorObt+" user: "+usuarioObt+" pass: "+passwordObt);
              }//termina if
              else{
                 /*despliega mensaje de advertencia en caso de tratar de logearse 
                  *como prestatario utilizando usuario o contraseña invalidos
                  */ 
                 JOptionPane.showMessageDialog(null,"Error al logearse como prestatario\nUsuario y/o Contraseña No Validos!!!");
              }//termina else
              
           }//termina try 
           catch(Exception e){
              JOptionPane.showMessageDialog(null,"Error"+e);
           }//termina catch
            
        }//termina if
todo lo demas del codigo si me funciona salve esto:

Código:
if((idprestadorObt.equals(idprestador)) && (usuarioObt.equals(usuario)) && (passwordObt.equals(password))){
                 JOptionPane.showMessageDialog(null,"id: "+idprestadorObt+" user: "+usuarioObt+" pass: "+passwordObt);
              }//termina if
              else{
                 /*despliega mensaje de advertencia en caso de tratar de logearse 
                  *como prestatario utilizando usuario o contraseña invalidos
                  */ 
                 JOptionPane.showMessageDialog(null,"Error al logearse como prestatario\nUsuario y/o Contraseña No Validos!!!");
              }//termina else
aqui es donde tengo el problema no me compara correctamente las variables string de echo ya inavilite este codigo solo deje el JOptionPane para ver que efectivamente si me imprime los valores obtenidos de la base de datos y que estan guardados en las variablesidprestadorObt,usuarioObt y passwordObt.
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #4 (permalink)  
Antiguo 13/08/2013, 06:30
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 10 meses
Puntos: 22
Respuesta: comparar 2 variables string en un if

Veamos, el problema puede venir por dos cosas:

1) El fallo este en que alguna de las siguientes variables no tiene el valor que debe tener:

Código Java:
Ver original
  1. String idprestador;
  2.         String usuario;
  3.         String password;
  4.         String idprestadorObt;
  5.         String usuarioObt;
  6.         String passwordObt;
Y al hacer la comparación no la pasa.


2) Que se te este colando un espacio en blanco... y al imprimirlo por pantalla no veas ese espacio. Para quitar los espacios en blanco de una cadena de texto, utilizas el método trim() de la siguiente manera por ejemplo:

Código Java:
Ver original
  1. idprestador=(txtIdPrestador.getText()).trim();
  2.         usuario=(txtUsuario.getText()).trim();
  3.         password=(txtPassword.getText()).trim();

OJO trim() te eliminaría los espacios al principio y al final de la cadena!! Los espacios que esten por el medio no te los quita!!


Por ultimo, mirando el codigo he visto estas lineas cuando sacas los datos de la BBDD:

Código Java:
Ver original
  1. resultado=pctoUsuario.executeQuery();
  2.               while(resultado.next()){
  3.                usuarioObt=usuarioObt+resultado.getString(1);
  4.               }//termina while

Eso te funcionará siempre y cuando el ResultSet no te devuelva más de un valor. Es decir si el ResultSet te devuelve 2 valores, por ejemplo, Ruben y Aitor... la variable usuarioObt almacenará "RubenAitor", no se si me explico.

Un saludo.
  #5 (permalink)  
Antiguo 13/08/2013, 18:40
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 11 años, 3 meses
Puntos: 0
Sonrisa Respuesta: comparar 2 variables string en un if

te debo una amigo muchisimas gracias por tu paciente ayuda jejeje, efectivamente tenias razon sobre los espacios en blanco, implemente las funciones .trim() en donde me dijiste que las colocara pero en pricipio seguia sin funcionas, hasta que despues de probar y probar encontre que el mejor lugar para colocarlos es en el encabezado de la instruccion if de la siguiente forma:

Código:
if((idprestadorObt.trim().equals(idprestador)) && (usuarioObt.trim().equals(usuario)) && (passwordObt.trim().equals(password))){
                 JOptionPane.showMessageDialog(null,"Logeado al fin correctamente!!!");   
              }//termina if
              else{
                 /*despliega mensaje de advertencia en caso de tratar de logearse 
                  *como prestatario utilizando usuario o contraseña invalidos
                  */ 
                 JOptionPane.showMessageDialog(null,"id:"+idprestadorObt+"user:"+usuarioObt+"pass:"+passwordObt);
              }//termina else
las partes en azul son en donde se coloca esta funcion jejej mi hipotesis sobre el por que me daba error de acuerdo a lo que me mencionastees la siguiente:

el primer lugar donde me sugeriste colocar la funcion .trim() no contiene ningun espacio entonses bajando en el codigo lo mas probable es que el espacio lo coloque al devolver el valor al invocar a los procedimientos almacenados ¿el por que no lo se? pero de igual forma puede que los procedimientos almacenados no esten bien definidos me refiero a su codigo aun asi se puede corregir esto.

de nuevo te doy las gracias amigo y comparto la solucion con todos los demas miembros del foro para que puedan aprender algo nuevo asi como yo aprendi esto muchas gracias
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #6 (permalink)  
Antiguo 14/08/2013, 00:09
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 10 meses
Puntos: 22
Respuesta: comparar 2 variables string en un if

Me alegra haberte ayudado!!

Un saludo!!

Etiquetas: string, variables
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 13:56.