概述
出现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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复