Illegal operation on empty result set.

来源:互联网 发布:淘宝论坛怎么引流 编辑:程序博客网 时间:2024/06/06 01:07

Illegal operation on empty result set.      在空的结果集上进行(非法)操作

先贴错误日志,然后分析.

org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [select * from system_user where sys_user_email = ?]; Illegal operation on empty result set.; nested exception is java.sql.SQLException: Illegal operation on empty result set.at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:107)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:637)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:666)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:674)at com.wswhr.LoginServer.dao.impl.SystemUserDaoImpl.selectUserByEmail(SystemUserDaoImpl.java:68)at com.wswhr.LoginServer.service.impl.SystemUserServiceImpl.isExist(SystemUserServiceImpl.java:28)at com.wswhr.LoginServer.springmvc.controller.RegisterController.exist(RegisterController.java:46)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)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:103)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:612)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)at java.lang.Thread.run(Unknown Source)Caused by: java.sql.SQLException: Illegal operation on empty result set.at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:713)at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5624)at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5544)at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5584)at com.alibaba.druid.filter.FilterChainImpl.resultSet_getString(FilterChainImpl.java:809)at com.alibaba.druid.filter.stat.StatFilter.resultSet_getString(StatFilter.java:930)at com.alibaba.druid.filter.FilterChainImpl.resultSet_getString(FilterChainImpl.java:807)at com.alibaba.druid.proxy.jdbc.ResultSetProxyImpl.getString(ResultSetProxyImpl.java:687)at com.alibaba.druid.pool.DruidPooledResultSet.getString(DruidPooledResultSet.java:257)at com.wswhr.LoginServer.dao.impl.SystemUserDaoImpl$1.extractData(SystemUserDaoImpl.java:81)at com.wswhr.LoginServer.dao.impl.SystemUserDaoImpl$1.extractData(SystemUserDaoImpl.java:1)at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:649)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)... 35 more

报错的代码如下:

public SystemUser selectUserByEmail(String email) {String sql = "select * from system_user where sys_user_email = ?";Object[] args = {email};//List<SystemUser> user = getMasterTemplate().query(sql,args, ROW_MAPPER);////if(user == null||user.size() == 0){//return null;//}else{//return user.get(0);//}SystemUser user = getMasterTemplate().query(sql, args, RESULT_SET);return user;}
    @Resource(name = "JDBCdataSourceTemplate")    private JdbcTemplate masterTemplate;        protected JdbcTemplate getMasterTemplate() {        return masterTemplate;    }

<!-- 登录连接数据库 --><bean id="JDBCdataSourceTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource" /></bean>

顺序有点乱.   上面三块的代码块顺序应该完全颠倒.

报错的代码是.    user = getMasterTemplate().quert(sql,args,RESULT_SET);

RESULE_SET的代码如下:

private final ResultSetExtractor<SystemUser> RESULT_SET = new ResultSetExtractor<SystemUser>() {@Overridepublic SystemUser extractData(ResultSet rs) throws SQLException,DataAccessException {String id = rs.getString("sys_user_id");String name = rs.getString("sys_user_name");String password = rs.getString("sys_user_password");String email = rs.getString("sys_user_email");String status = rs.getString("sys_user_status");String type = rs.getString("sys_user_type");Date createDate = rs.getDate("sys_user_createdate");return new SystemUser( id, name, password, email,status,type,createDate);}};

import org.springframework.dao.DataAccessException;import org.springframework.jdbc.core.ResultSetExtractor;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Repository;

报错的原因是,查询的结果集 ResultSet 是空的,所以,不能用  rs.getString("");。

判断查询结果集是否为空:

参考文章:http://blog.csdn.net/friendan/article/details/7039164

就是  rs.next()     ,如果 返回true ,就不为空,如果是false,就是空结果集。

一下代码加 非空验证判断,就可以了。

private final ResultSetExtractor<SystemUser> RESULT_SET = new ResultSetExtractor<SystemUser>() {@Overridepublic SystemUser extractData(ResultSet rs) throws SQLException,DataAccessException {if(<span style="font-family: Arial, Helvetica, sans-serif;">rs.next()</span><span style="font-family: Arial, Helvetica, sans-serif;">){//rs.next()</span>String id = rs.getString("sys_user_id");String name = rs.getString("sys_user_name");String password = rs.getString("sys_user_password");String email = rs.getString("sys_user_email");String status = rs.getString("sys_user_status");String type = rs.getString("sys_user_type");Date createDate = rs.getDate("sys_user_createdate");return new SystemUser( id, name, password, email,status,type,createDate);}else{return null;}}};

0 0
原创粉丝点击