AYUDA EN PREPAREDSTATEMENT

SALUDOS...
TENGO UN PROBLEMA CON LA INTERFAZ PREPAREDSTATEMENT CUANDO ASIGNA EL SEGUNDO PARAMETRO DE MI QUERY ME TRUENA MANDANDOME LA EXCEPCION DE EL INDICE 2 ESTA FUERA DEL INTERVALO

try {
            ArrayList Parametros = new ArrayList();
            Parametros.addAll(Arrays.asList(ParametrosConsulta));

            if (OD == null) {
                OD = C.ConexionSaliente();
            }            
            PS = OD.prepareStatement(Consulta, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
           
            for (i = 0; i < Parametros.size(); i++) {
                if (Parametros.get(i) instanceof Integer) {
                    PS.setInt(i + 1, Integer.parseInt(Parametros.get(i).toString()));
                } else if (Parametros.get(i) instanceof Float) {
                    PS.setFloat(i + 1, Float.parseFloat(Parametros.get(i).toString()));
                } else if (Parametros.get(i) instanceof String) {
                    if (validarFecha(Parametros.get(i).toString())) {
                        PS.setObject(i + 1, Parametros.get(i).toString()); // CUANDO AQUI PASA POR 2º VEZ TRUENA OJO SON FECHAS PORQUE CON SETDATE ME MANDA ERROR Y OBJECT ME DEJA SIN PROBLEMA ALGUNO
                    } else {
                        PS.setString(i + 1, Parametros.get(i).toString());
                    }
                }                
            }

            RS = PS.executeQuery();
           
            /*PMD = PS.getParameterMetaData();
            for(i = 0; i < PMD.getParameterCount(); i++){
                System.out.println(PMD.getParameterTypeName(i) + "/n");
                System.out.println(PMD.getParameterClassName(i) + "/n");
            }
            int CuantosParametros = PMD.getParameterCount();
            for(j = 0; j <= CuantosParametros; j++)
                System.out.println(" " + (iTipoDatos = PMD.getParameterType(j)));*/

           
            RS.beforeFirst();
            while (RS.next()) {
                lstElementos.add(RS.getObject(1));
            }
            RS.close();
            PS.close();
            OD = null;
        } catch (Exception msj) {
            JOptionPane.showMessageDialog(null, "Origen:  " + this.getClass().getName()                    
                    + "\n" + msj, "EROR EN ALGO", JOptionPane.WARNING_MESSAGE);
            for (StackTraceElement Elements : msj.getStackTrace()) {
                System.out.println(" " + Elements.toString());
            }
        }

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

qué horror

Qué horror de código. Al parecer ya tienes un arreglo que se llama ParametrosConsulta (las variables en Java deberían comenzar con minúscula pero bueno es una convención no es a fuerzas), para qué lo metes a un ArrayList, creando una lista intermedia?

Luego, en cuanto al error por el que preguntas, pues sin ver el SQL de la consulta no podemos decirte. Los errores de que los parámetros están fuera de rango generalmente ocurren porque tienes más parámetros que holders en el query, es decir, "SELECT * FROM BLA WHERE a=?" y que le quieres pasar un parámetro en el índice 2 pues truena porque solamente espera un parámetro.

En cuanto a lo del object vs date o no sé qué, pues tienes que hacer un cast. ps.setDate(1,parametros.get(0)) obvio truena porque parametros no tiene tipo (no le pusiste pero aún así, tendría que ser Object probablemente), tienes que hacer un cast: ps.setDate(1,(Date)parametros.get(0)).

Imagen de Mike060987

OK

NO TIENES QUE SER TAN DESPECTIVO
ES UNA CONVENCION NO ES A FUERZAS

Imagen de oscarblancarte

No SQL

Efectivamente, como dice ezamudio, Sin ver el SQL que estas ejecutando solo podemos hablar al aire, ya que no podemos ver el motivo real del error, Si nos compartes el SQL te podemos ayudar mejor.

Saludos.

Imagen de Mike060987

GRACIAS OSCAR

DE HECHO ESO FUE HABIA UNA CIMILLA DESPUES DE UN HOLDER
PERO QUE NO VEIA PORQUE MI STRING TENIA SALTOS DE LINEA
SALUDOS