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

alguien que me ayude con java??

Estas en el tema de alguien que me ayude con java?? en el foro de Java en Foros del Web. estoy haciendo una aplicación que al intentar registrarte, si el nombre de usuario escogido existe en la base de datos,al lado del textfield aparece un ...
  #1 (permalink)  
Antiguo 30/05/2012, 05:11
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
alguien que me ayude con java??

estoy haciendo una aplicación que al intentar registrarte, si el nombre de usuario escogido existe en la base de datos,al lado del textfield aparece un icono de error y si el nombre no existe en la base de datos el icono debería ser un icono de ok. El caso es que funciona con el icono del error pero si introduzco un nombre de usuario que esté libre el icono de ok no me aparece. No sé si me he explicado bien. Os pongo el código del evento del textfield. Gracias de antemano.

txt_usu_reg.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
String nom_usu = txt_usu_reg.getText();
if (nom_usu.isEmpty()){
lbl_ok.setIcon(null);
}
try {
ResultSet rs = Bdatos.getSt().executeQuery("SELECT nombre_usuario FROM usuarios " +
"WHERE nombre_usuario LIKE '"+nom_usu+"'");
while(rs.next()){
if (rs.getObject(1).equals(nom_usu)){
lbl_ok.setIcon(new ImageIcon("imagen/null.png"));
} else {
lbl_ok.setIcon(new ImageIcon("imagen/ok.png"));
}
}
} catch (Exception c) {
System.out.println("Error.- No se ha podido realizar la consulta "+ c.getMessage());
}
}
});
  #2 (permalink)  
Antiguo 30/05/2012, 05:58
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: alguien que me ayude con java??

Hola:

Si el nombre de usuario no existe, el resultSet no tendrá resultados y no entrará en el bucle while(rs.next()).

Pon mejor

if (rs.next()) {
el usuario existe
} else {
el usuario no existe
}

o un select count(*) from usuarios where .... y así obtendrás cuántos usuarios hay con ese nombre. Si es 0, no existe, si es 1 o más, ya existe.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 30/05/2012, 06:03
 
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 6
Respuesta: alguien que me ayude con java??

No estoy 100% pero ¿podria ser porque comparas un "Objeto" generico con un String, y por eso siempre devuelve false?

Prueba con
if (rs.getString(1).equals(nom_usu))
en lugar de
if (rs.getObject(1).equals(nom_usu))
  #4 (permalink)  
Antiguo 30/05/2012, 06:28
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: alguien que me ayude con java??

gracias a los dos, pero sigue sin funcionar. El caso es que lo que haya en el if siempre funciona, lo que no entra es en el else.
  #5 (permalink)  
Antiguo 30/05/2012, 06:31
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 2 meses
Puntos: 14
Respuesta: alguien que me ayude con java??

Es como comenta Chuidiang, que si el usuario no existe salta a la excepción y no entrará nunca en el if. También ignorará el IF cuando la consulta esté mal, cuando no se pueda conectar con la BD, etc..

PD: Imagino que usarás el finally para hacer el close de la conexión, ¿no?

Un saludo.
__________________
Aprendiendo un poco de Java :D
  #6 (permalink)  
Antiguo 30/05/2012, 06:33
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 2 meses
Puntos: 14
Respuesta: alguien que me ayude con java??

Prueba entonces con esto:

if ((rs.getObject(1).toString()).equals(nom_usu)){
lbl_ok.setIcon(new ImageIcon("imagen/null.png"));
} else {
lbl_ok.setIcon(new ImageIcon("imagen/ok.png"));
}

Lo he puesto aquí en el foro, corrige si lo he puesto mal.
__________________
Aprendiendo un poco de Java :D
  #7 (permalink)  
Antiguo 30/05/2012, 06:33
 
Fecha de Ingreso: mayo-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 23
Respuesta: alguien que me ayude con java??

Si estas aprendiendo y usas un IDE como eclipse o netbeans (Existen mas, pero solo manejo esos dos) puedes probar a hacer debug.
Se aprende muchisimo con el debbuger, y puedes ver que es lo que hace punto por punto tu programa!

Saludos!
  #8 (permalink)  
Antiguo 30/05/2012, 06:38
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: alguien que me ayude con java??

Cita:
Iniciado por caruizj Ver Mensaje
Es como comenta Chuidiang, que si el usuario no existe salta a la excepción y no entrará nunca en el if. También ignorará el IF cuando la consulta esté mal, cuando no se pueda conectar con la BD, etc..

PD: Imagino que usarás el finally para hacer el close de la conexión, ¿no?

Un saludo.
Gracias pero tampoco me ha servido esto:

if ((rs.getObject(1).toString()).equals(nom_usu)){
lbl_ok.setIcon(new ImageIcon("imagen/null.png"));
} else {
lbl_ok.setIcon(new ImageIcon("imagen/ok.png"));
}

Utilizo eclipse helio

entonces cómo lo hago para que entre en el if si no existe en la bd??
esta es mi clase para conectarme a la bd

package baseDatos;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class accesoBD {

private final static String drv="com.mysql.jdbc.Driver";
private final static String db="jdbc:mysql://localhost:3306/bd_spoti";

private final static String user="root";
private final static String pass="ccc";

private Connection cn;

private Statement st;



public accesoBD(){

try{

Class.forName(drv);

cn = DriverManager.getConnection(db,user,pass);

st = cn.createStatement();

}catch (Exception e) {

System.out.println("Error.- Se ha producido un error al conectar con la base de datos");
}

}

public Statement getSt(){

return st;
}

}
  #9 (permalink)  
Antiguo 30/05/2012, 06:49
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 2 meses
Puntos: 14
Respuesta: alguien que me ayude con java??

Intenta hacerlo así:

Código Javascript:
Ver original
  1. txt_usu_reg.addKeyListener(new KeyAdapter() {
  2. public void keyReleased(KeyEvent e) {
  3. String nom_usu = txt_usu_reg.getText();
  4. if (nom_usu.isEmpty()){
  5. lbl_ok.setIcon(null);
  6. }
  7.  
  8. try {
  9. ResultSet rs = Bdatos.getSt().executeQuery("SELECT nombre_usuario FROM usuarios " + "WHERE nombre_usuario LIKE '"+nom_usu+"'");
  10.  
  11. if (rs.next())  String nombreUsuario = rs.getString("nombre_usuario");
  12.  
  13. }
  14. } catch (Exception c) {
  15. System.out.println("Error.- No se ha podido realizar la consulta "+ c.getMessage());
  16. }
  17. }
  18. });
  19.  
  20. // haces comprobación
  21. if (nombreUsuario.equals(nom_usu)  lbl_ok.setIcon(new ImageIcon("imagen/null.png"));
  22.  
  23. else if (!nombreUsuario.equals(nom_usu) lbl_ok.setIcon(new ImageIcon("imagen/ok.png"));

Yo todo eso lo veo bien... Si no te funciona pensaría en pasarle el debugg como te han comentado arriba...
__________________
Aprendiendo un poco de Java :D
  #10 (permalink)  
Antiguo 30/05/2012, 07:18
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: alguien que me ayude con java??

Muchísimas gracias, caruizj. funcionó por fin!. El debugg es que aún no lo manejo,así que no sabría ver el error.Gracias a todos por vuestra ayuda.
  #11 (permalink)  
Antiguo 30/05/2012, 07:51
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 2 meses
Puntos: 14
Respuesta: alguien que me ayude con java??

No sabes por qué no te funcionaba, no? me alegro que te haya funcionado :)

Un saludo.
__________________
Aprendiendo un poco de Java :D
  #12 (permalink)  
Antiguo 30/05/2012, 08:07
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: alguien que me ayude con java??

Cita:
Iniciado por caruizj Ver Mensaje
No sabes por qué no te funcionaba, no? me alegro que te haya funcionado :)

Un saludo.
No sé porque no funcionaba, pero tenía una validación con la que me pasaba lo mismo, mostraba una ventana en el if y otra en el else y esta ultima no se hacia visible, pero he hecho lo mismo que me dijiste y ahora funciona. Lo único que he hecho es hacer la validación fuera del while. lo dejo por si a alguien le sirve.



btnAceptar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String nombre = txt_usu_log.getText();
String sms = nombre+" ha iniciado sesión correctamente ";
String password = txt_pass_log.getText();
String usu = "";
String pass = "";

if (nombre.isEmpty() && password.isEmpty() || nombre.isEmpty() || password.isEmpty()) {
JOptionPane.showMessageDialog(panel_login,sms_vaci o,"Error",JOptionPane.WARNING_MESSAGE);
}
try {
ResultSet rs = Bdatos.getSt().executeQuery("SELECT nombre_usuario,password FROM usuarios " +
"WHERE nombre_usuario LIKE '"+nombre+"' and password LIKE '"+password+"'");
while(rs.next()) {
usu = rs.getString(1);
pass = rs.getString(2);
}
if (usu.equals(nombre) && pass.equals(password)) {
JOptionPane.showMessageDialog(panel_login,sms,"Bie nvenid@",JOptionPane.INFORMATION_MESSAGE);
panel_fondo.setSelectedIndex(1);
} else {
JOptionPane.showMessageDialog(panel_login,sms_erro r,"Error",JOptionPane.ERROR_MESSAGE);
}
} catch (Exception c) {
System.out.println("Error.- No se ha podido realizar la consulta "+ c.getMessage());
}
}
});

Etiquetas: string
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 01:52.