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