es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta HANA con marcador de posición dinámico ejecutado utilizando jdbcTemplate en Spring Boot.

Tengo algunas consultas HANA que dependen de la entrada PLACEHOLDER. La entrada para esto está actualmente codificada en duro, lo que está provocando la detección de vulnerabilidades de inyección SQL por parte de Veracode.

Para solucionar esto, estoy tratando de parametrizar el valor dado a PLACEHOLDER utilizando PreparedStatement, pero obtengo el siguiente error:

PreparedStatementCallback: SQLException sin categorizar para SQL [SELECT * FROM some_table (PLACEHOLDER. " $$ $$ \ " =>?) WHERE some_flag =?;]; estado SQL [HY000]; código de error [2048]; SAP DBTech JDBC: [2048]: error de almacén de columnas: error de tabla de búsqueda: [34023] falló la creación del modelo de cálculo; excepción 306002: se produjo un error interno

Ya he revisado esta solución y he leído la documentación de los parámetros de entrada en SAP HANA. A continuación se muestra mi código:

String sqlQuery = "SELECT * FROM some_table ( PLACEHOLDER. \"$$<ip_some_column>$$\" => ? ) WHERE some_flag = ? ;";

PreparedStatementSetter preparedStatementSetter = (PreparedStatement ps) -> {
    ps.setString(1, firstInput);
    ps.setString(2, secondInput);
};

ResultSetExtractor<t> rse = new DataResultSetExtractor();

getJdbcTemplate().query(sqlQuery, preparedStatementSetter, rse);

Lo mismo funciona bien de la manera codificada en duro (propensa a la inyección de SQL):

StringBuffer sql = new StringBuffer();
sql.append("SELECT * FROM some_table ").append("( 'PLACEHOLDER' = ('$IP_SOME_COLUMN$','").append(firstColumnValue).append("'))");
//Map<string,object> paramMap = new HashMap<string,object>();
//getNamedParameterJdbcTemplate().query(sql.toString(), paramMap, rse);

¿Cómo puedo solucionar este error?</string,object></string,object>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un problema con el modelo de cálculo de la consulta. Esto puede no estar directamente relacionado con el uso de marcadores de posición o parámetros.

    Sin embargo, hay algunas cosas que puede intentar para solucionar el problema con los marcadores de posición parametrizados:

    1. Asegúrese de que los valores de entrada para los marcadores de posición sean del tipo correcto. Por ejemplo, si se espera que el valor sea un entero, use ps.setInt(1, intValue) en lugar de ps.setString(1, stringValue).
    2. Verifique si hay algún carácter especial en los valores de entrada que pueda causar problemas. Por ejemplo, si el valor de entrada contiene una comilla simple (') puede causar problemas con la sintaxis de la consulta. En ese caso, puede intentar escapar los caracteres especiales o usar un método diferente para pasar el valor del parámetro.

    3. Verifique que la sintaxis de la consulta sea correcta y que los marcadores de posición se estén reemplazando por los valores correctos. Puede usar un depurador o declaraciones de impresión para verificar la cadena de consulta antes de que se ejecute.

    Si ninguna de las sugerencias anteriores resuelve el problema, podría ser un problema con la base de datos HANA en sí misma o el modelo de cálculo utilizado en la consulta. En ese caso, es posible que desee consultar la documentación de HANA o ponerse en contacto con el equipo de soporte de HANA para obtener más ayuda.

Comments are closed.