Error en JSP al traer un String
Hola, primero que Hola! soy nuevo en el foro, espero no equivocarme al postear esto en esta seccion, de ser asi porfavor moderadores muevan el tema e indiquenmelo,
El problema que tengo es con un fragmento de codigo en JSP + MySQL, estoy desarrollando un formulario de registro en linea, registro, borro, pero no edito correctamente.
Al querer traer el String de la base de datos (MySQL) solo me trae un fragmento del campo seleccionado, es decir, Si mi nombre es Jose Luis solo me trae Jose, todo lo que esta despues del espacio no lo trae.
Ya revise la longitud del campo en la base de datos y esta bien tengo Varchar de 30, y jose luis no me ocupa mas de 30 caracteres, les paso el codigo...
De antemano muchas gracias.
Document : modificar
Created on : 25-oct-2010, 18:48:25
Author : OrlandoHC
--%>
<%@page contentType="text/html" pageEncoding="UTF-8" import="java.sql.*"%>
<%@page import = "java.sql.*" %>
<%@ page import ="myPackage.Config" %>
<%@ page import="java.util.*" %>
<%@ page import ="myPackage.AdminU" %>
<%@ page import ="myPackage.Usuario" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" href="estilo.css" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<%
String codigo= request.getParameter("cod");
String user="root";
String clave="";
String ruta="jdbc:mysql://localhost:3306/directoriodemibasededatos";
Connection conexion=null;
Statement Sentencias = null;
ResultSet tablaREsultado = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
conexion =DriverManager.getConnection(ruta,user,clave);
Sentencias = conexion.createStatement();
tablaREsultado = Sentencias.executeQuery("select * from personal where id='"+codigo+"'");
//hacemos esa consulta con filtro a la base de datos
while(tablaREsultado.next())//soltamos los registros y combinamos el html con jsp objetos
//con el value
{
%>
<form name="fvalida" method="post" action="modisi.jsp">
<input type="hidden" name="cod" value=<% out.println(tablaREsultado.getString(1));%>/>
<table align="center">
<tr>
<td colspan="2"><div align="center">Modificar Informacion</div></td>
</tr>
<tr>
<td>Tarjeta</td>
<td><input type="text" name="tarjeta" maxlength="30" value=<% out.println(tablaREsultado.getString(2));%> /></td>
</tr>
<tr>
<td>Matricula</td>
<td><input type="text" name="matricula" maxlength="30" value=<% out.println(tablaREsultado.getString(3));%> /></td>
</tr>
<tr>
<td>Nombre</td>
<td><input type="text" name="nombre" value=<%out.println(tablaREsultado.getString(4)); //Aqui es donde corta la información %> /></td>
</tr>
<tr>
<td>Apellidos</td>
<td><input type="text" name="apellido" maxlength="50" value=<% out.println(tablaREsultado.getString(5)); //Aqui tambien NO me muestra los 2 apellidos%> /></td>
</tr>
<tr>
<td>Turno</td>
<td> <div><select name="turno" />
<option value="<% out.print(tablaREsultado.getString(6)); %>">Selecciona...</option>
<option value="Matutino">Matutino</option>
<option value="Vespertino">Vespertino</option>
<option value="Nocturno">Nocturno</option>
<option value="Jornada Acumulada">Jornada Acumulada</option>
</div></td>
</tr>
<tr>
<td>Horario</td>
<td>
<div class="Estilo9"><select name="horario" />
<option value="<% out.print(tablaREsultado.getString(7)); %>">Selecciona..</option>
<option value="7:00 - 13:30">7:00 - 13:30</option>
<option value="7:00 - 15:00">7:00 - 15:00</option>
<option value="13:30 - 20:00">13:30 - 20:00</option>
<option value="13:30 - 21:30">13:30 - 21:30</option>
<option value="20:30 - 8:10">20:30 - 8:10</option>
<option value="Jornada A.">Jornada A.</option>
</div>
</tr>
<tr>
<td>Descansos</td>
<td>
<div class="Estilo9"><select name="descansos" />
<option value="<% out.print(tablaREsultado.getString(8)); %>">Selecciona..</option>
<option value="Lunes y Martes">Lunes y Martes</option>
<option value="Martes y Miercoles">Martes y Miercoles</option>
<option value="Miercoles y Jueves">Miercoles y Jueves</option>
<option value="Jueves y Viernes">Jueves y Viernes</option>
<option value="Viernes y Sabado">Viernes y Sabado</option>
<option value="Sabado y Domingo">Sabado y Domingo</option>
<option value="Jornada A.">Jornada A.</option>
</div>
</tr>
<tr>
<td>Telefono</td>
<td>
<input type="text" name="telefono" maxlength="100" value=<% out.println(tablaREsultado.getString(9));%> /></td>
</tr>
<tr>
<td> </td>
<td><table width="304" border="0">
<tr>
<td width="106"><input name="button" type="button" onClick="window.location.reload()" value="Actualizar"></td>
<td width="106"><div align="center">
<input type="submit" name="enviar" value="Guardar Cambios" />
</div></td>
<td width="78"><div align="center">
<input type="reset" name="button2" id="button2" value="Limpiar" />
</div></td>
</tr>
</table></td>
</tr>
</table>
</form>
<%
}
tablaREsultado.close();//cerramos la conexion y listo ya tenemos los registros a modificar
%>
</body>
</html>
</code
Mi clase AdminU
<code>
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package myPackage;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
/**
*
* @author OrlandoHC
*/
public class AdminU {
Config conf = new Config();
Statement stm = null;
ResultSet rs = null;
public String insertar(Usuario a){
String exito="No se agregó la información";
try{
stm = conf.obtenerCnx().createStatement();
String query = "INSERT INTO personal (tarjeta,matricula,nombre,apellido,turno,horario,descansos,telefono) VALUES ('"+a.getTarjeta()+"' ,'"+a.getMatricula()+"','"+a.getNombre()+"' , '"+a.getApellido()+"' , '"+a.getTurno()+"' , '"+a.getHorario()+"','"+a.getDescansos()+"' , '"+a.getTelefono()+"' )";
int x = stm.executeUpdate(query);
exito = ("<script>alert('El registro se agregó correctamente')</script>" + "<meta http-equiv='refresh' content='0;url=registrados.jsp'" );
stm.close();
conf.close();
}catch(Exception er){
System.out.println(er.toString());
}
return exito;
}
public String update(Usuario a){
String exito="No se modificó la información";
try{
stm = conf.obtenerCnx().createStatement();
String query = "UPDATE personal SET tarjeta='"+a.getTarjeta()+"', matricula='"+a.getMatricula()+"' , nombre='"+a.getNombre()+"' ,apellido='"+a.getApellido()+"' , turno='"+a.getTurno()+"' ,horario='"+a.getHorario()+"', descansos='"+a.getDescansos()+"' , telefono='"+a.getTelefono()+"' WHERE id="+a.getId();
int x = stm.executeUpdate(query);
exito = "El registro se ha actualizado con éxito";
stm.close();
conf.close();
}catch(Exception er){
System.out.println(er.toString());
}
return exito;
}
public String delete(int id){
String exito="No se modificó la información";
try{
stm = conf.obtenerCnx().createStatement();
String query = "DELETE FROM personal WHERE id="+id;
int x = stm.executeUpdate(query);
exito = ("<script>alert('Se elimino el registro correctamente')</script>" + "<meta http-equiv='refresh' content='0;url=registrados.jsp'" );
stm.close();
conf.close();
}catch(Exception er){
System.out.println(er.toString());
}
return exito;
}
public ArrayList selectListaDeUsuarios() {
ArrayList<Usuario> list = new ArrayList();
try {
stm = conf.obtenerCnx().createStatement();
rs = stm.executeQuery("SELECT id,tarjeta,matricula,nombre,apellido,turno,horario,descansos,telefono from personal");
while (rs.next()) {
Usuario a = new Usuario();
a.setId(Integer.valueOf(rs.getString("id")));
a.setTarjeta(rs.getString("tarjeta"));
a.setMatricula(rs.getString("matricula"));
a.setNombre(rs.getString("nombre"));
a.setApellido(rs.getString("apellido"));
a.setTurno(rs.getString("turno"));
a.setHorario(rs.getString("horario"));
a.setDescansos(rs.getString("descansos"));
a.setTelefono(rs.getString("telefono"));
list.add(a);
}
rs.close();
stm.close();
conf.close();
}
catch(Exception e) {
Usuario b = new Usuario();
b.setId(0);
b.setTarjeta("Error!");
b.setMatricula("Ocurrió un");
b.setNombre("error");
b.setApellido("grave");
b.setTurno("de");
b.setHorario("conexion");
b.setDescansos("o");
b.setTelefono("de insercion");
list.add(b);
}
return list;
}
public Usuario getUsuarioById(int id){
Usuario a=new Usuario();
try{
stm = conf.obtenerCnx().createStatement();
rs = stm.executeQuery("SELECT id,tarjeta,matricula,nombre,apellido,turno,horario,descansos,telefono from personal WHERE id="+id);
while (rs.next()) {
a.setId(Integer.valueOf(rs.getString("id")));
a.setTarjeta(rs.getString("tarjeta"));
a.setMatricula(rs.getString("matricula"));
a.setNombre(rs.getString("nombre"));
a.setApellido(rs.getString("apellido"));
a.setTurno(rs.getString("turno"));
a.setHorario(rs.getString("horario"));
a.setDescansos(rs.getString("descansos"));
a.setTelefono(rs.getString("telefono"));
}
stm.close();
rs.close();
conf.close();
}catch(Exception e){
a.setId(0);
a.setTarjeta("Error");
a.setMatricula("error");
a.setNombre("Algo");
a.setApellido("grave");
a.setTurno("paso");
a.setHorario("no se pudo");
a.setDescansos("recuperar");
a.setTelefono("la informacion");
}
return a;
}
}
Cualquier duda o sugerencia es bien recibida, ademas de las criticas.
- Inicie sesión o regístrese para enviar comentarios
Tira líneas con
Tira líneas con
System.out.println( tuObjeto.toString() );
si tienes untoString()
debería aparecer en la consola todos los datos de tu objeto, ahí te das cuenta, si vienen los datos completos... si no haz implementado eltoString()
deberías hacerlo...Y bueno, tu código, tiene una atracción animal a hacerle inyección de SQL, no deberías meter lógica en tu Jsp, ya no contemos la conexión a la base de datos...
Si usas algún IDE, también podrías hacer debug al código, y checar el código fuente desde el navegador que uses, para que veas el html resultante, y verificar que no los campos no tengan alguna restricción, es lo que se me ocurre.....
PreparedStatement
Un comentario muy aparte porque no sé si sea la solución a tu problema o no, pero usa PreparedStatements parametrizados, no concatenes SQL.