[Resolvido]Spring JdbcTemplate erro

Bom se utilizar o JDBC nativo do Java não da esse erro, porém quando utilizo o JdbcTemplate do spring está ocorrendo está exception:


org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 2
	at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:74)
	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:697)
	at br.gov.caixa.daos.jdbc.DataJdbcTemplateDAO.getDatasOfMonth(DataJdbcTemplateDAO.java:42)
	at br.gov.caixa.services.DataServices.getDatasOfMonth(DataServices.java:28)
	at br.gov.caixa.struts.reports.datas.PesquisaChamadasPorDataAction.execute(PesquisaChamadasPorDataAction.java:38)
	at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
	at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
	at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:636)
	Collection<Data> datas = (Collection<Data>) this.jdbcTemplate.queryForObject(SQL.toString(),  new Object[]{monthInit, monthEnd},
			    new RowMapper() {
					 public Object mapRow(ResultSet rs, int rowNum) throws SQLException{
						 Data data = new Data();
							data.setIdData(rs.getInt("iddata"));
							data.setData(rs.getString("data"));
							data.setContador(rs.getInt("contador"));
							data.setTma(rs.getInt("tma"));
							data.setTempoReal(rs.getInt("temporeal"));
							
							Calendar calendar = Calendar.getInstance();
							calendar.setTime(rs.getDate("dhpesq"));
							data.setDhPesquisa(calendar);
						return data;
			        }
			    });
			

Estou utlizando o datasource:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="org.postgresql.Driver" />
		<property name="url" value="jdbc:postgresql://127.0.0.1:5432/xxx" />
		<property name="username" value="postgres" />
		<property name="password" value="xxx" />
		<property name="maxIdle" value="10" />
		<property name="maxActive" value="100" />
		<property name="maxWait" value="1000" />
		<!-- <property name="validationQuery" value="select 1" /> -->
		<property name="testOnBorrow" value="false" />
		<property name="testWhileIdle" value="true" />
		<property name="timeBetweenEvictionRunsMillis" value="1200000" />
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<property name="numTestsPerEvictionRun" value="5" />
		<property name="defaultAutoCommit" value="true" />
	</bean>

Já na classe com jdbc nativo do java não ocorre nenhum erro:

[code]

@Repository
public class DataJdbcDAO implements DataDAO {

private Connection connection;

@Autowired
public DataJdbcDAO(DataSource dataSource) throws SQLException{
	this.connection = dataSource.getConnection();
}


public List<Data> getDatasOfMonth(Date monthInit, Date monthEnd)throws SQLException {

	//Isso é necessario por causa do método setDate do PreparedStatement
	java.sql.Date dataInitSql = new java.sql.Date(monthInit.getTime());
	java.sql.Date dataFinalEndSql = new java.sql.Date(monthEnd.getTime());
	
	StringBuilder SQL = new StringBuilder();

	SQL.append("select d.iddata, d.data, d.contador, d.tma, d.temporeal, d.dhpesq from tbData d ")
		.append("where d.dhpesq BETWEEN ? AND ?");
	PreparedStatement pst = connection.prepareStatement(SQL.toString());
	pst.setDate(1, dataInitSql);
	pst.setDate(2, dataFinalEndSql);
	
	ResultSet resultSet = pst.executeQuery();
	List<Data> datas = new ArrayList<Data>();
	
	while(resultSet.next()){
		Data data = new Data();
		data.setIdData(resultSet.getInt("iddata"));
		data.setData(resultSet.getString("data"));
		data.setContador(resultSet.getInt("contador"));
		data.setTma(resultSet.getInt("tma"));
		data.setTempoReal(resultSet.getInt("temporeal"));
		
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(resultSet.getDate("dhpesq"));
		data.setDhPesquisa(calendar);
		datas.add(data);
	}
	return datas;
}

}[/code]

Alguém já passou por isso???

O sistema estava redondinho com hibernate, mas estou precisando migrar para JDBC, mas nao qria utilizar Jdbc nativo.
Abraços

ps: editei o titulo e um code

O problema é que você está usando o método errado para retornar uma lista: this.jdbcTemplate.queryForObject() retorna um único objeto.
Veja a exceção: org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 2 Ele está dizendo que esperar receber 1 resultado mas está recebendo 2.
Para lista use o método: this.jdbcTemplate.queryForList()

então valew pela dica, resolvi mudando para apenas query:[code]
List<Data> datas = (List<Data>) this.jdbcTemplate.query(SQL.toString(), new Object[]{monthInit, monthEnd},
new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException{
Data data = new Data();
data.setIdData(rs.getInt(“iddata”));
data.setData(rs.getString(“data”));
data.setContador(rs.getInt(“contador”));
data.setTma(rs.getInt(“tma”));
data.setTempoReal(rs.getInt(“temporeal”));

						Calendar calendar = Calendar.getInstance();
						calendar.setTime(rs.getDate("dhpesq"));
						data.setDhPesquisa(calendar);
					return data;
		        }
		    });

[/code]
Utilizando o queryForList tive problema no cast do list.
Abs

Legal que resolveu.

Coloca o tópico como resolvido.