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 Puntos75620

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:
}

Cristi_C comentado Feb 6, 2015

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.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

  • rach ganó una medalla hace 22 horas

    Buena Pregunta - Recibió +1 votos en pregunta
  • Vivi ganó una medalla hace 6 días

    Club de los 100 - Recibió un total de 100 puntos
  • kevin1998 ganó una medalla Dic 6

    Club de los 100 - Recibió un total de 100 puntos
  • Toren23 ganó una medalla Dic 6

    Fotogénico - Subió un avatar
  • Toren23 ganó una medalla Dic 6

    Club de los 100 - Recibió un total de 100 puntos
  • jextrada ganó una medalla Dic 6

    Club de los 100 - Recibió un total de 100 puntos
  • jvelasquez7 ganó una medalla Dic 5

    Club de los 100 - Recibió un total de 100 puntos
  • Azael ganó una medalla Dic 5

    Club de los 100 - Recibió un total de 100 puntos
  • nelsonamaya ganó una medalla Dic 5

    Fotogénico - Subió un avatar
...

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

Conecta