entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Duda en consulta por rango de fechas

Hola a todos, al momento de consultar un rango por fechas, no me muestra todos los registros no hace caso en el rango que especifico por decir ingreso desde '01-02-2015' hasta '03-02-2015', por fa alguien que me ayude.
en esta parte es donde el jsp recibe los parametros de las fechas,mando a llamar el metodo consultarxfecha de la clase controlador.

<%
if(request.getParameter("fecha_desde")!=null){
String fecha_desde = request.getParameter("fecha_desde");
if(request.getParameter("fecha_hasta")!=null)
 {  
String fecha_hasta = request.getParameter("fecha_hasta");     
controladorAsistencia controladorAsistenciaTrabajadores = new controladorAsistencia();
 Iterator<modeloAsistencia> it_asistenciaTrabajadores;
 it_asistenciaTrabajadores = controladorAsistencia.consultarxfecha(fecha_desde,fecha_hasta).iterator();
int contador = 0;
 if (it_asistenciaTrabajadores != null) {
%>

en donde viene el problema a la hora que ejecuta la consulta:
la clase controlador
 me muestra el siguiente mensaje:
IMPRIMIENDO CONSULTA:SELECT RA.ID_REGISTRO_ASISTENCIA,T.APELLIDO_PATERNO_T,T.APELLIDO_MATERNO_T,T.NOMBRE_T,RA.FECHA_REGISTRO FROM REGISTRO_ASISTENCIA RA,TRABAJADOR T WHERE  RA.REGISTRO_FECHA  BETWEEN '01-02-2015' AND '03-02-2015' AND T.ID_TRABAJADOR=RA.ID_TRABAJADOR;
Error en fechas: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

public List<modeloAsistencia> consultarxfecha(String fecha_desde,String fecha_hasta) {
     PreparedStatement psmt = null;
     ResultSet tabla = null;
     List<modeloAsistencia> list = new ArrayList<modeloAsistencias>();

     String consultar = "SELECT RA.ID_REGISTRO_ASISTENCIA,T.APELLIDO_PATERNO_T,T.APELLIDO_MATERNO_T,T.NOMBRE_T,RA.FECHA_REGISTRO  FROM REGISTRO_ASISTENCIA RA,TRABAJADOR T WHERE ";
     if (fecha_desde !=null){
     consultar +=" RA.REGISTRO_ASISTENCIA BETWEEN '"+fecha_desde+"'";
     }
     if(fecha_hasta !=null){
     consultar +="AND '"+fecha_hasta+"'";
     }
     consultar += "AND T.ID_TRABAJADOR=RA.ID_TRABAJADOR;";
          System.out.println("IMPRIMIENDO CONSULTA:"+consultar);
     try {
     Context ctx = new InitialContext();
     DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mantenimiento");
     Connection con = ds.getConnection();
     psmt = con.prepareStatement(consultar);
       if (fecha_desde != null) {
     psmt.setString(1, fecha_desde);
     }
     if (fecha_hasta != null) {
     psmt.setString(2, fecha_hasta);
     }
     tabla = psmt.executeQuery();
     while (tabla.next()) {

1 Respuesta

2votos

white Puntos75880

Debes agregar el termino ? a tu consulta, y usar setString(), por otra parte te aconsejo verificar de mejor manera las variables fecha_desde y fecha_hasta, a modo de evitar inyecciones sql, podrias hacer uso de SimpleDateFormat.parse para verificar que es una fecha.

java.util.Date fecha_desde_parse = null;
java.util.Date fecha_hasta_parse = null;

boolean fecha_desde_valida = false;
boolean fecha_hasta_valida = false;

try {
    fecha_desde_parse = new SimpleDateFormat("dd-MM-yyyy")
                                        .parse(fecha_desde);
    fecha_hasta_parse = new SimpleDateFormat("dd-MM-yyyy")
                                        .parse(fecha_hasta);
} catch (Exception e) {}

fecha_desde_valida = (fecha_desde_parse != null);
fecha_hasta_valida = (fecha_hasta_parse != null);

if(!fecha_desde_valida || !fecha_desde_valida)
{
    if( !fecha_desde_valida )
        throw new Error(
            String.format("fecha desde invalida (%s)", fecha_desde));

    if( !fecha_hasta_valida )
        throw new Error(
            String.format("fecha hasta invalida (%s)", fecha_hasta));
}

String consultar = "SELECT RA.ID_REGISTRO_ASISTENCIA," +
                   "T.APELLIDO_PATERNO_T, T.APELLIDO_MATERNO_T," +
                   "T.NOMBRE_T, RA.FECHA_REGISTRO" +
                   "FROM REGISTRO_ASISTENCIA AS RA,TRABAJADOR AS T" +
                   "WHERE RA.REGISTRO_ASISTENCIA BETWEEN ? AND ?" +
                   "AND T.ID_TRABAJADOR=RA.ID_TRABAJADOR" +

Connection con = ds.getConnection();
psmt = con.prepareStatement(consultar);
psmt.setString(1, fecha_desde);
psmt.setString(2, fecha_hasta);

tabla = psmt.executeQuery();

while(tabla.next())
{
    // ready? C:
}

0voto

Cristi_C comentado

Gracias por tu sugerencias white aplique el uso de SimpleDateFormat.parse, el otro error lo tenia en mi consulta en una de las columnas error de escritura

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta