rs.close() 奇怪的问题

不停哥哥 2018-07-20 11:16:56
遇到一个奇怪的问题请教下各位:
String SQLAUTHORITY_ ="select * from role where role = '" +ROLE_+ "'";
PreparedStatement pStmt_ = conn.prepareStatement(SQLAUTHORITY_);
ResultSet rs_r = pStmt_.executeQuery();
rs_r.next();
String authority_query =rs_r.getString("query");
session.setAttribute("user_auth_query",authority_query);
rs_r.close();
一个简单的数据库查询,查到了一条记录(应该也是一条),在控制台输出上面那个 authority_query的值也没问题,说明查询过程正确运行了,最后的问题是rs_r.close();这句出错说s_r cannot be resolved,再说明下注掉这句其他都是正常得到了运行,结果也没问题。

网上查有人说rs关闭出错有时和用了session有关,请教大神们帮忙解释解释!!!
...全文
267 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
傅九爷 2018-07-23
  • 打赏
  • 举报
回复
楼上说的对 你的rs_r是在if语句块里生成的 属于局部变量 所以关闭的时候需要在对应的有效域中进行操作。
stacksoverflow 2018-07-23
  • 打赏
  • 举报
回复
rs_r.close();写到if(rs.next()){的里面
stacksoverflow 2018-07-23
  • 打赏
  • 举报
回复
引用 7 楼 u014632570 的回复:
明白了,谢谢两位,原来IF这样的语句块也有这特性,我以为局部变量就是在页面范围里。

每个局部变量的作用范围在他所属的左括号和右括号之间, 遇到左括号,指令进栈,遇到右括号,指令出栈,变量自然就没了。自己看一下这方面内容。
不停哥哥 2018-07-23
  • 打赏
  • 举报
回复
明白了,谢谢两位,原来IF这样的语句块也有这特性,我以为局部变量就是在页面范围里。
verejava 2018-07-21
  • 打赏
  • 举报
回复
表面看没有错,全部代码贴出来看一下
swing wang 2018-07-21
  • 打赏
  • 举报
回复
代码不全,那个session是什么session?httpServletSession还算数据连接session
滴滴-学生卡 2018-07-21
  • 打赏
  • 举报
回复
能不能完整把代码发一下
不停哥哥 2018-07-21
  • 打赏
  • 举报
回复
引用 2 楼 Java_zero 的回复:
代码不全,那个session是什么session?httpServletSession还算数据连接session


这是个jsp页面里的一段代码,<%......%>中间的,前面就是连接数据库的一些内容,后面就是一些close(),没什么其他的。session几时那么直接写的,想把那个参数存起来供其他页面用。我想应该叫httpServletSession吧,我也不知道数据连接session这个概念的。
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/jsp-test/";
%>

<html>
<head>
<title>reglog-login-loginCh</title>
<base href="<%=basePath%>">
</head>
<body>

<%
String user = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
String pwd = new String(request.getParameter("pwd").getBytes("ISO-8859-1"),"UTF-8");
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/RUNOOB";
String username = "root";
String password = "123456";
Class.forName(driverName);//加载驱动
Connection conn = DriverManager.getConnection(url,username,password);//得到连接
String sqllocation ="select * from tb_user where UName = '" +user + "' and Password = '" +pwd + "'";
PreparedStatement pStmt = conn.prepareStatement(sqllocation);
ResultSet rs = pStmt.executeQuery();


if(rs.next()){
String USER_ =rs.getString("UName");
String ROLE_ =rs.getString("role");
String SQLAUTHORITY_ ="select * from role where role = '" +ROLE_+ "'";
PreparedStatement pStmt_ = conn.prepareStatement(SQLAUTHORITY_);
ResultSet rs_r = pStmt_.executeQuery();
rs_r.next();
//使查询结果记录的指针指向第一条记录
String authority_query =rs_r.getString("query");
String authority_insert =rs_r.getString("insert");
String authority_update =rs_r.getString("update");
String authority_delete =rs_r.getString("delete");
session.setAttribute("user_logged", USER_);
session.setAttribute("user_role",ROLE_);
session.setAttribute("user_auth_query",authority_query);
session.setAttribute("user_auth_insert",authority_insert);
session.setAttribute("user_auth_update",authority_update);
session.setAttribute("user_auth_delete",authority_delete);
System.out.println("当前登录的用户:"+USER_+" 角色:"+ROLE_+" 权限:"+authority_query+authority_insert+authority_update+authority_delete);

out.println("<script language='javascript'>alert('登录成功!');top.iframe_b.location.href='reglog-login-loginCh-success.jsp?user="+user+"';</script>");

}else{
out.println("<script language='javascript'>alert('用户名或者密码错误,返回登录!');window.location.href='blank.html';</script>");

}
//rs_r.close();
rs.close();
pStmt.close();
conn.close();
System.out.println("登录验证完毕,数据库关闭 "+date.toString());
%>

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧