tag listar lib formularios configurar con biblioteca java postgresql jdbc prepared-statement

java - listar - tag libraries



¿Cómo establecer la lista de parámetros en la declaración preparada? (8)

Después de examinar varias soluciones en diferentes foros y no encontrar una buena solución, creo que el siguiente truco que encontré es el más fácil de seguir y codificar. Sin embargo, tenga en cuenta que esto no utiliza una consulta preparada, pero realiza el trabajo de todos modos:

Ejemplo: supongamos que tiene una lista de parámetros para pasar en la cláusula ''IN''. Simplemente ponga una cadena ficticia dentro de la cláusula ''IN'', por ejemplo, "PARAM" denotará la lista de parámetros que vendrá en el lugar de esta cadena ficticia.

select * from TABLE_A where ATTR IN (PARAM);

Puede recopilar todos los parámetros en una sola variable String en su código Java. Esto puede hacerse de la siguiente manera:

String param1 = "X"; String param2 = "Y"; String param1 = param1.append(",").append(param2);

Puede agregar todos sus parámetros separados por comas en una sola variable de cadena, ''param1'', en nuestro caso.

Después de recopilar todos los parámetros en una sola cadena, puede reemplazar el texto ficticio en su consulta, es decir, "PARAM" en este caso, con el parámetro String, es decir, param1. Aquí está lo que tú necesitas hacer:

String query = query.replaceFirst("PARAM",param1); where we have the value of query as query = "select * from TABLE_A where ATTR IN (PARAM)";

Ahora puede ejecutar su consulta utilizando el método executeQuery (). Solo asegúrate de no tener la palabra "PARAM" en tu consulta en ningún lado. Puede usar una combinación de caracteres especiales y alfabetos en lugar de la palabra "PARAM" para asegurarse de que no haya posibilidad de que aparezca una palabra en la consulta. Espero que tengas la solución.

tengo una lista de nombres, por ejemplo:

List<String> names = ... names.add(''charles''); ...

y una declaración:

PreparedStatement stmt = conn.prepareStatement(''select * from person where name in ( ? )'');

cómo hacer lo siguiente:

stmt.setParameterList(1,names);

¿Hay alguna solución? ¿Alguien puede explicar por qué falta este método?

usando: java, postgresql, jdbc3


En caso de que el significado de las preguntas sea establecer varios params en una sola llamada ...

Como la validación de tipo ya está definida en un nivel superior, creo que la única necesidad es setObject(...) .

Por lo tanto, se puede usar un método de utilidad:

public static void addParams(PreparedStatement preparedStatement, Object... params) throws SQLException { for (int i = 0; i < params.length; i++) { Object param = params[i]; preparedStatement.setObject(i+1, param); } }

Uso:

SqlUtils.addParams(preparedStatement, 1, ''2'', 3d);

Siéntete libre de convertir esto a Java 8 lambda :)


Esta pregunta es muy antigua, pero nadie ha sugerido usar setArray

Esta respuesta podría ayudar a https://.com/a/10240302/573057


Estaba revisando el código esta mañana y uno de mis colegas tenía un enfoque diferente, simplemente pasa el parámetro usando setString("name1'',''name2'',''name3") .

Nota: omití la comilla simple al principio y al final porque setString va a setString .


No hay una manera clara de hacer esto simplemente estableciendo una lista en el Estado PreparedStatement que conozco.

Escriba el código que construye la declaración de SQL (o mejor reemplaza a una sola o similar) con el número apropiado de signos de interrogación (el mismo número que en su lista) y luego repita sobre su lista estableciendo el parámetro para cada uno.


Otro método:

public void setValues(PreparedStatement ps) throws SQLException { // first param inside IN clause with myList values ps.setObject(1 , myList.toArray(), 2003); // 2003=array in java.sql.Types }


Para postgres 9 he usado este enfoque:

jdbcTemplate.query(getEmployeeReport(), new PreparedStatementSetter() { @Override public void setValues(PreparedStatement ps) throws SQLException { ps.setTimestamp(1, new java.sql.Timestamp(from.getTime())); ps.setTimestamp(2, new java.sql.Timestamp(to.getTime())); StringBuilder ids = new StringBuilder(); for (int i = 0; i < branchIds.length; i++) { ids.append(branchIds[i]); if (i < branchIds.length - 1) { ids.append(","); } } // third param is inside IN clause // Use Types.OTHER avoid type check while executing query ps.setObject(3, ids.toString(), **Types.OTHER**); } }, new PersonalReportMapper());


este método falta debido al borrado de tipo, el tipo de parámetro de la Lista se pierde en el tiempo de ejecución. Por lo tanto, la necesidad de agregar varios métodos es: setIntParameters , setLongParameters , setObjectParameters , etc.