query with LIKE operator mysql java

0

I am dynamically creating a Select by concatenating a series of parameters that are collected from a form.

@Override
public List<ResultadoBusquedaEnsayo> buscarEnsayos(BusquedaEnsayo busquedaEnsayo){

    List<Object> parametros = new ArrayList<Object>();
    List<Integer> tipos = new ArrayList<Integer>();

    String query = "SELECT IDMATERIAL, TIPO_ENSAYO, en.ID AS ID_ENSAYO, INICIO, BIBLIOGRAFICO, TEMPERATURA, RATIO_CRUDO, ";
        query += " IFNULL((SELECT PRESIONPARCIAL FROM GAS_TRABAJO gastSelect WHERE gastSelect.ID = en.ID AND gastSelect.IDGAS = (SELECT IDGAS FROM GAS gas WHERE gas.COMPOSICION ='H2S' ) ), 0) AS H2S, ";
        query += " IFNULL((SELECT PRESIONPARCIAL FROM GAS_TRABAJO gastSelect WHERE gastSelect.ID = en.ID AND gastSelect.IDGAS = (SELECT IDGAS FROM GAS gas WHERE gas.COMPOSICION ='CO2' ) ), 0) AS CO2, ";
        query += " PHFIN, CORR_GENERALIZADA, CORR_BACTERIANA, CORR_ACOP_GALVAN, CORR_EROSION, CORR_OTROS, VEL_CORROSION, PICADURAS, CREVICE, "
            + " AGRIETAMIENTO, SUSCEPTIBILIDAD_SSC";


    query += " FROM ENSAYO en join RESULTADOS res on en.ID=res.ID WHERE 1=1 ";

    if(busquedaEnsayo.getProdCorrosion() != null && !busquedaEnsayo.getProdCorrosion().isEmpty()){

        query += " AND res.PROCORR=?";
        parametros.add(busquedaEnsayo.getProdCorrosion());
        tipos.add(Types.VARCHAR);
    }   query += " )";

    int[] tiposArr = new int[tipos.size()];
    for(int i =0;i<tipos.size(); i++){
        tiposArr[i]=tipos.get(i);
    }

    return getJdbcTemplate().query(query, parametros.toArray(), tiposArr, rowMapper);

In the field of the PROCORR database, I want to add a LIKE '%?%' where ? is the parameter that it collects from the form, in this case oxido , so that it finds me the results that contain the value that He passed. Something like this:

if(busquedaEnsayo.getProdCorrosion() != null && !busquedaEnsayo.getProdCorrosion().isEmpty()){

    query += " AND res.PROCORR LIKE '%?%'";
    parametros.add(busquedaEnsayo.getProdCorrosion());
    tipos.add(Types.VARCHAR);
}

When executing this statement, it throws me a QueryException. I do not know how to perform the syntax correctly. The final SQL that is launched is the following:

SELECT IDMATERIAL, TIPO_ENSAYO, en.ID AS ID_ENSAYO, INICIO, BIBLIOGRAFICO, TEMPERATURA, RATIO_CRUDO,  IFNULL((SELECT PRESIONPARCIAL FROM GAS_TRABAJO gastSelect WHERE gastSelect.ID = en.ID AND gastSelect.IDGAS = (SELECT IDGAS FROM GAS gas WHERE gas.COMPOSICION ='H2S' ) ), 0) AS H2S,  IFNULL((SELECT PRESIONPARCIAL FROM GAS_TRABAJO gastSelect WHERE gastSelect.ID = en.ID AND gastSelect.IDGAS = (SELECT IDGAS FROM GAS gas WHERE gas.COMPOSICION ='CO2' ) ), 0) AS CO2,  PHFIN, CORR_GENERALIZADA, CORR_BACTERIANA, CORR_ACOP_GALVAN, CORR_EROSION, CORR_OTROS, VEL_CORROSION, PICADURAS, CREVICE,  AGRIETAMIENTO, SUSCEPTIBILIDAD_SSC FROM ENSAYO en join RESULTADOS res on en.ID=res.ID WHERE 1=1  AND res.PROCORR LIKE '%?%'



return getJdbcTemplate().query(query, parametros.toArray(), tiposArr, rowMapper)

The version of my mysql server is: '5.1.72-community'

    
asked by miss Robot 23.11.2017 в 11:38
source

1 answer

1

Change it to

    query += " AND res.PROCORR LIKE ?";
    parametros.add("%"+busquedaEnsayo.getProdCorrosion()+"%");
    tipos.add(Types.VARCHAR);
    
answered by 23.11.2017 / 11:44
source