【发布时间】:2016-02-26 18:45:41
【问题描述】:
获取异常
java.sql.SQLException: ResultSet 关闭后不允许操作
<%
ResultSet rs=null,rs1=null;
Statement stmt=null,stmt1=null;
String UserID = request.getParameter("UserID");
String Password = request.getParameter("Password");
session.setAttribute("UserID",UserID);
int flag=0;
try{
System.out.println("Validating..1");
//stmt = con.createStatement();
//stmt1 = con.createStatement();
String Query = "select * from login where UserID = '"+UserID+"' and Password='"+Password+"'";
System.out.println(Query);
rs = st.executeQuery(Query);
System.out.println(rs);
if(rs!=null)
{
String Query1="Select * from basicdetails where UserID='"+UserID+"' and Password='"+Password+"'";
System.out.println(Query1);
rs1=st.executeQuery(Query1);
//System.out.println(rs1);
if(!rs1.next())
{
System.out.println("RS1");
while(rs1.next())
{
String PhotoPath=rs1.getString(4);
System.out.println("-------------------"+PhotoPath);
session.setAttribute("PhotoPath",PhotoPath);
}
}
}
if(!rs.next())
{
String Auth=rs.getString(3);
session.setAttribute("Auth",new Integer(Auth));
flag=1;
if(Auth.equals("0"))
{
//Show Admin Menu
%>
<jsp:forward page="AdminMenu.jsp"/>
<%
}
else if(Auth.equals("1"))
{
//Show user Menu
%>
<jsp:forward page="UserHome.jsp"/>
<%
}
}
else
{
flag=0;
%>
<jsp:forward page="Login.jsp"/>
<%
}
stmt.close();
con.close();
}catch(Exception e){
System.out.println(e.getCause());
System.out.println(e.getStackTrace());
System.out.println(e.getClass());
%><%=e%><%
}
%>
这是 Netbeans 输出窗口中显示的消息
Validating..1 select * from login where UserID = 'admin' and 密码='admin' com.mysql.jdbc.JDBC4ResultSet@b2c1e7 Select * from basicdetails where UserID='admin' and Password='admin' RS1 null [Ljava.lang.StackTraceElement;@1d8608c 类 java.sql.SQLException
上述代码是什么问题,即 .jsp 文件试图验证管理员和其他用户的登录凭据。
【问题讨论】:
-
明显的问题是jsp中的java代码。尝试重构使用标签库或jstl表达式,它可能会更容易调试
-
stmt.close();也会关闭ResultSet。 -
@ElliottFrisch 即使我删除了最后两行
stmt.close();和con.close();仍然得到同样的错误 -
主密码:
' OR 1=1 --。您需要切换到使用prepared statements。 -
每个人都在谈论他们自己的观点,没有人能解开我的疑惑。我只是在问为什么 rs1 自己关闭是什么原因。我不是在寻求解决方案
标签: java jdbc resultset multiple-resultsets