Java 使用NameParameterJdbctemplate对查询进行分页

Java 使用NameParameterJdbctemplate对查询进行分页,java,spring,pagination,informix,jdbctemplate,Java,Spring,Pagination,Informix,Jdbctemplate,如何使用NameParameterJdbcTemplate对查询进行分页 我尝试使用基本jdbcTemplate,但我犯了一些错误。。这是我的问题: sql.append("SELECT VGPT_EXE.* FROM ") .append(Constants.T_VW_GPT_E_BASIC) .append(" AS VGPT_EXE ") .append("WHERE VGPT_EXE.") .append(Constants.ID_SUBJECTE

如何使用NameParameterJdbcTemplate对查询进行分页

我尝试使用基本jdbcTemplate,但我犯了一些错误。。这是我的问题:

sql.append("SELECT VGPT_EXE.* FROM ")
     .append(Constants.T_VW_GPT_E_BASIC)
     .append(" AS VGPT_EXE ")
     .append("WHERE VGPT_EXE.")
     .append(Constants.ID_SUBJECTE
    + " in (:listOfValues)");



    PreparedStatementCreatorFactory pscf;
    MapSqlParameterSource parameterss = new MapSqlParameterSource();
    parameterss.addValue("listOfValues", ids);
    pscf = new PreparedStatementCreatorFactory(sql.toString());
    pscf.setResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
所以我认为我不能在namedParameter查询中设置列表值的问题是什么?或者我做错了什么

resultat.setResultats((List<IDeute>) template.getJdbcOperations()
                                .query((PreparedStatementCreator) pscf.newPreparedStatementSetter(new ArrayList<Long>(parameterss.getValues().values())),
                                new ResultSetPaginatExtractor(new MapperDeute(), 
                                resultat.getFiles(), 
                                resultat.getInici())));

嗯,似乎NamedParameterdJd中有一个错误。。所以我改为jdbcTemplate original

这是最终的工作代码:

sql.append("SELECT VGPT_EXE.* FROM ")
      .append(Constants.T_VW_GPT_E_BASIC)
      .append(" AS VGPT_EXE ")
      .append("WHERE VGPT_EXE.")
      .append(Constants.ID_SUBJECTE
      + " IN (");

for (int i = 0; i < ids.size(); i++) {
     if (i > 0) {
    sql.append(",");
        }
     sql.append("?");**for every dinamic id add an ?**
     parametres.add(ids.get(i));
     tipusParametres.add(new SqlParameter(Types.INTEGER));
}
    sql.append(")");
    sql.append(" AND VGPT_EXE." + Constants.ID_ENS_EXP + " = ? ");
                parametres.add(idEns);
                tipusParametres.add(new SqlParameter(Types.INTEGER));

                if (tipusDeute != null) {
                    if (tipusDeute.equals(ETipusDeute.HISTORIC)) {
                        sql.append(" AND " + Constants.DATA_FI_VOL
                                + " < TODAY ");
                    }
                    if (tipusDeute.equals(ETipusDeute.VIGENT)) {
                        sql.append(" AND " + Constants.DATA_FI_VOL
                                + " >= TODAY ");
                    }
                }
                // ordenació per la clau
                sql.append(ORDER_BY_E);
                try {

                pscf = new PreparedStatementCreatorFactory(sql.toString());
                // El resultset HA DE SER DEL TIPUS TYPE_SCROLL_INSENSITIVE
                pscf.setResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
                for (SqlParameter sp : tipusParametres) {
                    pscf.addParameter(sp);
                }

                resultat.setResultats((List<IDeute>) template.getJdbcOperations().query(pscf.newPreparedStatementCreator(parametres.toArray()), new ResultSetPaginatExtractor(new MapperDeute(), 
                        resultat.getFiles(), 
                        resultat.getInici())));
我希望这对我有帮助

sql.append("SELECT VGPT_EXE.* FROM ")
      .append(Constants.T_VW_GPT_E_BASIC)
      .append(" AS VGPT_EXE ")
      .append("WHERE VGPT_EXE.")
      .append(Constants.ID_SUBJECTE
      + " IN (");

for (int i = 0; i < ids.size(); i++) {
     if (i > 0) {
    sql.append(",");
        }
     sql.append("?");**for every dinamic id add an ?**
     parametres.add(ids.get(i));
     tipusParametres.add(new SqlParameter(Types.INTEGER));
}
    sql.append(")");
    sql.append(" AND VGPT_EXE." + Constants.ID_ENS_EXP + " = ? ");
                parametres.add(idEns);
                tipusParametres.add(new SqlParameter(Types.INTEGER));

                if (tipusDeute != null) {
                    if (tipusDeute.equals(ETipusDeute.HISTORIC)) {
                        sql.append(" AND " + Constants.DATA_FI_VOL
                                + " < TODAY ");
                    }
                    if (tipusDeute.equals(ETipusDeute.VIGENT)) {
                        sql.append(" AND " + Constants.DATA_FI_VOL
                                + " >= TODAY ");
                    }
                }
                // ordenació per la clau
                sql.append(ORDER_BY_E);
                try {

                pscf = new PreparedStatementCreatorFactory(sql.toString());
                // El resultset HA DE SER DEL TIPUS TYPE_SCROLL_INSENSITIVE
                pscf.setResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
                for (SqlParameter sp : tipusParametres) {
                    pscf.addParameter(sp);
                }

                resultat.setResultats((List<IDeute>) template.getJdbcOperations().query(pscf.newPreparedStatementCreator(parametres.toArray()), new ResultSetPaginatExtractor(new MapperDeute(), 
                        resultat.getFiles(), 
                        resultat.getInici())));