retorna VALOR DE 0
pido su ayuda por que tengo un problema y nn se como solucioarlo,
el detalle aqui es que deseo obtener el la clave de un trabajador(personal) a partir de su nombre
los datos que tengo en la bd son los siguientes
| clave_personal | nombre_completo | clave_departamento |
+----------------+-----------------+--------------------+
| 0 | NULL | 0 |
| 1 | Felipe | 1 |
| 2 | Obama | 2 |
| 3 | Vicente | 2 |
| 4 | Manuel | 2 |
| 5 | Elda | 2 |
| 6 | Oscar | 2 |
| 7 | Maria | 3 |
| 8 | Alma | 3 |
| 9 | Nancy | 3 |
| 10 | Carmen | 4 |
+----------------+-----------------+--------------------+
para eso cree este metodo
int clave_Personal = 0;
try {
nombrePersonal = nombrePersonal.trim();
statement = conn.createStatement();
rs = statement.executeQuery("select clave_personal from personal where nombre_completo='" + nombrePersonal + "'");
int cont = 0;
if (rs.next()) {
// System.out.println("numero de registro-"+cont+": "+rs.getString("nombre_completo"));
cont++;
clave_Personal = rs.getInt(1);
}
System.out.println("la clave del personal:" + nombrePersonal + " es " + clave_Personal);
} catch (SQLException ex) {
Logger.getLogger(Llamada.class.getName()).log(Level.SEVERE, null, ex);
}
return claveDepartamento;
}
y lo probe en el entorno de escritorio y si me funciona
se usa de la siguiente manera
y lo que me imprimiría en caso de recibir el nombre de alma como parámetro
la clave del personal:Alma es 8
me regresaria el valor de 8, en la clase si lo hace
pero a la hora de ejecutarlo en un JSP
solo me regresa el valor de 0 y no por que lo hace
por ejemplo lo ejecuta asi
int personalResponsable = Llamada.clavePersonal(contactoNombre);
out.print("contactoNombre: "+contactoNombre);
out.print("<br>");
out.print("personalResponsable: "+personalResponsable);
out.print("<br>");
out.print("largo: " + contactoNombre.length()+" nombre" + contactoNombre + "clave: " + Llamada.clavePersonal(contactoNombre));
out.print("<br>");
y de este codigo lo se imprime es
contactoNombre: Alma
personalResponsable: 0
largo: 4 nombreAlmaclave: 0
y siempre valor que mande como parámetro siempre me retorna cero(0)
si alguien me puede ayudar se lo agradeceré
- Inicie sesión o regístrese para enviar comentarios
Quizá te estas conectando a
Quizá te estas conectando a otra base de datos.
Por cierto que va a pasar cuando el nombre sea:
?
Te va a devolver el primer registro que generalmente es el del admin.
Use prepared statements
http://xkcd.com/327/
antes que nada
NO CONCATENES SQL, te haces vulnerable a ataques de inyección de SQL. Y no quieres que te inyecten SQL o sí?
Piensa lo que pasa si estás capturando el nombre de una forma en donde un usuario (que puedo ser yo) teclea el nombre a buscar. Qué pasa si tecleo como nombre
';DROP TABLE personal;--
? Pues tiro tu tabla.Por eso debes usar Statements parametrizados.
ps.setString(1, contactoNombre);
rs = ps.executeQuery();
Con eso ya puedes tener una persona llamada
'; DROP TABLE personal;--
y la puedo buscar y me la vas a devolver.Probablemente lo que está pasando con tu JSP es que se pierde en el camino el nombre que teclearon en la forma, porque lo capturas mal o lo que sea, y entonces le pasas un nulo a tu método, y cuando estás concatenando cadenas con
+
(otra mala práctica), si pasas unnull
se concatena "null". Por eso te encuentra el registro con clave 0.PEBKAC
Ja ja ja por cierto ya vi cual es el problema: PEBKAC
Línea 11:
Linea 18:
Seguramente tienes una variable de clase que se llama:
claveDepartamento
y como no la usas su default es 0.:) :) y tan tan..
Otra pregunta que te hace pensar que si la primera vez no funciona la segunda si lo hará?Si vas a imprimir un valor que ya calculaste, no vale la pena volverlo a calcular, simplemente usa la variable que ya creaste.
out.pr.....
out.pr.....
out.pr.....
out.pr..... "clave: " + Llamada.clavePersonal(contactoNombre)); <------ SEGUNDA LLAMADA
Saludos!
SQL Injection
Chécate este post que hizo @ezamudio: http://www.javamexico.org/blogs/ezamudio/ejemplo_de_inyeccion_de_sql
Performance
Oscar tiene razón, estás haciendo DOS llamadas a la función, por lo tanto para presentar un dato, haces DOS consultas a la base de datos. Eso es innecesario.
Y sí, el método está pésimo, guardas la clave en una variable y devuelves otra variable...
Gracias
ya lei el post recomendaron , como siempre gracias por su ayuda, de ustedes se aprende mucho de nuevo mil gracias, que bueno que existen comunidades como esta