首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.sql.SQLException:最后一行之后的结果集

java.sql.SQLException:最后一行之后的结果集
EN

Stack Overflow用户
提问于 2019-03-12 04:17:54
回答 1查看 10.9K关注 0票数 3

我想我遇到问题是因为下面提到的RequestDaoImpl类中的rs.next();这一行。每当我尝试检索STATUS的值时,我总是得到以下错误:

java.sql.SQLException: Result set after last row

我在这里做错了什么?

代码语言:javascript
复制
  @Component
    public class GetStatus {

        @JmsListener(destination = "Queue1")
        public void processStatusMessage(String message) throws DaoException {

            System.out.println("Message Retrieved is:" +message);

            try {

            RequestDao requestDao = (RequestDao) context.getBean("requestDao");

            String receivedStatus = requestDao.getRequestStatus(message);

            System.out.println("Testing March 11");
            System.out.println(receivedStatus);



            }
            catch(Throwable th){
                th.printStackTrace();   

            }

         }

        private static ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");



    }

我的RequestDao是:

代码语言:javascript
复制
public interface RequestDao {

    public String getRequestStatus(String msg)throws DaoException;

}

我的带有方法实现的RequestDaoImpl:

代码语言:javascript
复制
public class RequestDaoImpl implements RequestDao {

    public void setDataSource(DataSource dataSource) 
    {       
        jdbcTemplate = new JdbcTemplate(dataSource);                                    
    }

    @Override
    public String getRequestStatus(String msg) throws DaoException {
        DataSource ds = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String requestStatus = null;

        //List<String> mylist = new ArrayList<String>();

         try {

                ds = jdbcTemplate.getDataSource();
                conn = ds.getConnection();  

                //I am receiving message like this hence splitting it : 123456#Tan#development
                 String[] parts =   msg.split("#");
                 String requestID = parts[0].trim();
                 String userName =  parts[1].trim();
                 String applicationName = parts[2].trim();


                /*===========================================================================*/
                /*    Code to get the request status from Mytable          */ 
                /*===========================================================================*/
                pstmt = conn.prepareStatement("SELECT STATUS FROM Mytable WHERE request_user= ? and app_name =? and request_id=?");
                pstmt.setString(1,userName);
                pstmt.setString(2,applicationName);
                pstmt.setString(3, requestID);
                rs = pstmt.executeQuery();  
                rs.next();
                System.out.println("The status received is as follows:");

                requestStatus = rs.getString("STATUS");
                System.out.println(requestStatus);



        }
         catch(Throwable th) {
                throw new DaoException(th.getMessage(), th);
            }
            finally {
                if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }}
                if (pstmt != null) { try { pstmt.close(); } catch(SQLException sqe) { sqe.printStackTrace(); }}
                if (conn != null) { try { conn.close(); } catch (SQLException sqle) { sqle.printStackTrace(); }}

            }   



        return requestStatus;
    }
  private JdbcTemplate jdbcTemplate;    
 }

我在here上看到了类似的错误,但他们的代码和我的不同。

EN

回答 1

Stack Overflow用户

发布于 2019-03-12 04:24:08

您应该询问结果集是否有值,可能需要一个while

while(rs.next){ //your code here }

这样你就不会得到错误,而只是跳过return

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55109741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档