Java 使用NameParameterJdbctemplate对查询进行分页
如何使用NameParameterJdbcTemplate对查询进行分页 我尝试使用基本jdbcTemplate,但我犯了一些错误。。这是我的问题: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
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())));