我是靠谱客的博主 多情柚子,最近开发中收集的这篇文章主要介绍解决java.sql.SQLException: After end of result set,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

出现java.sql.SQLException: After end of result set主要是ResultSet 结果集中的指向结果集的光标在最后一行,数据已经一个一个向下指,最后没了,你接着再往后指,就出现这个异常了。

如果光标在第一行之前,使用 rs.getXX()获取列值,报错:Before start of result set
如果光标在最后一行之后,使用 rs.getXX()获取列值,报错:After end of result set

当然博主出现这个异常主要是因为引用了多个结果集的时候,由于前一个结果集已经和数据库关闭,你再次引用,所以出现java.sql.SQLException: After end of result set

我先声明这个案例的解决方式:由于高密度的PreparedStatement、ResultSet的频繁操作,全局的Connection 、PreparedStatement 、ResultSet 很容易出现前一个结果集已经和数据库关闭情况【每个方法每次都调用了 DBUtil.close(conn, ps, rs)】,所以把定义为全局的数据库连接放进方法中独自享用!

出错案例:

dao.impl代码
(注意:为了代码的可读性,我将impl中其他的方法去掉了)
【特别注意:定义的数据库连接是全局的私有属性】

public class FangYuanImpl implements IFangYuanDao{

	private Connection conn;
	private PreparedStatement ps;
	private ResultSet rs;
	//注意:定义的数据库连接是全局的
	@Override
	public FangYuanPo HuiTianFYByid(int fangyuanid) {
		List<ClientCLKPo> list=new ArrayList<ClientCLKPo>();
		ClientCLKPo selectvo=null;
		try {
			conn=DBUtil.getConnection();
			ps=conn.prepareStatement(findclientXLK);
			rs=ps.executeQuery();
			while(rs.next()){
				selectvo=new ClientCLKPo();
				selectvo.setId(rs.getInt("clientid"));
				selectvo.setText(rs.getString("name"));
				list.add(selectvo);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block     ArrayList<Novel> novellist2 = new  ArrayList<Novel>();
			e.printStackTrace();
		}finally{
			DBUtil.close(conn, ps, rs);
		}
		
		return list;
	}
	}

servlet代码

public void HuiTianFYByid(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
      String fangyuanid=request.getParameter("fangyuanid");
      
      FangYuanPo fangyuanpo=new FangYuanPo();
      fangyuanpo=marketingService.HuiTianFYByid(Integer.parseInt(fangyuanid));
      JSONObject jsonobject=JSONObject.fromObject(fangyuanpo);//返回json格式对象
      PrintWriter out=response.getWriter();
      out.write(jsonobject.toString());
      System.out.println("你的"+jsonobject.toString());
      out.flush();
      out.close();
      
	}

JSP代码:

 var FangYuanID = tbProgressTemplate1.getColumnValue(Index, "fangyuanid");
                $.post("${ctx}/servlet/MarketingServlet",{"fun":"HuiTianFYByid",fangyuanid:FangYuanID}, function (date) {
					json = eval('(' + date + ')');//js获取json格式的属性数据
					console.log(json.fangyuanname);
                   loadDatatoForm("form", json);//封装的方法
                });

页面服务请求情况: 其实我数据库查出的数据不止三条,由于前一个结果集已经和数据库关闭,之后的数据就直接铺街了QAQ
在这里插入图片描述

再后来就诞生了下面的可爱的java代码QAQ
在这里插入图片描述
决绝方法:把定义为全局的数据库连接放进方法中独自享用

public List<ClientCLKPo> findclientXLK() {
//把定义为全局的数据库连接放进方法中独自享用
		 Connection conn=null;
		 PreparedStatement ps=null;
		 ResultSet rs=null;
		
		List<ClientCLKPo> list=new ArrayList<ClientCLKPo>();
		ClientCLKPo selectvo=null;
		try {
			conn=DBUtil.getConnection();
			ps=conn.prepareStatement(findclientXLK);
			rs=ps.executeQuery();
			while(rs.next()){
				selectvo=new ClientCLKPo();
				selectvo.setId(rs.getInt("clientid"));
				selectvo.setText(rs.getString("name"));
				list.add(selectvo);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block     ArrayList<Novel> novellist2 = new  ArrayList<Novel>();
			e.printStackTrace();
		}finally{
			DBUtil.close(conn, ps, rs);
		}
		
		return list;
	}

最后

以上就是多情柚子为你收集整理的解决java.sql.SQLException: After end of result set的全部内容,希望文章能够帮你解决解决java.sql.SQLException: After end of result set所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部