java.sql.SQLException:结果集关闭后不允许操作
我有一段代码:java.sql.SQLException:结果集关闭后不允许操作,java,jdbc,sqlexception,Java,Jdbc,Sqlexception,我有一段代码: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String Username2 = request.getParameter("Username2");
String Password2 = request.getParameter("Password2");
String ResetPassword = request.getParameter("ResetPassword");
try {
Class.forName("com.mysql.jdbc.Driver");
String st = "jdbc:mysql://localhost:3306/LoginAccount";
Connection conn = (Connection) DriverManager.getConnection(st, "root", "baljinder");
Statement sta = (Statement) conn.createStatement();
ResultSet rs = sta.executeQuery("SELECT * FROM Account where Username='" + Username2 + "' && Password ='" + Password2 + "' ;");
while (rs.next()) {
if (Username2.equals(rs.getString("Username")) && Password2.equals(rs.getString("Password"))) {
sta.executeUpdate("update Account set Password ='" + ResetPassword + "' where Username='" + Username2 + "' ;");
out.print("your successful to Reset the password");
conn.close();
} else {
out.println("<h1>the Username and Password didn't match did not found </h1>");
}
}
} catch (SQLException ex) {
Logger.getLogger(AccountServlet.class.getName()).log(Level.SEVERE, null, ex);
//out.print(ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(AccountServlet.class.getName()).log(Level.SEVERE, null, ex);
out.print(ex);
} finally {
out.close();
}
}
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
字符串Username2=request.getParameter(“Username2”);
字符串Password2=request.getParameter(“Password2”);
字符串ResetPassword=request.getParameter(“ResetPassword”);
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
String st=“jdbc:mysql://localhost:3306/LoginAccount";
连接conn=(连接)DriverManager.getConnection(st,“root”,“baljinder”);
语句sta=(语句)conn.createStatement();
ResultSet rs=sta.executeQuery(“从帐户中选择*,其中用户名=”“+Username2+”&&Password=”“+Password2+”;”;
while(rs.next()){
if(Username2.equals(rs.getString(“用户名”))和&Password2.equals(rs.getString(“密码”)){
sta.executeUpdate(“更新帐户集密码=”+ResetPassword+“,其中用户名=”“+Username2+”;”);
打印(“您成功重置密码”);
康涅狄格州关闭();
}否则{
println(“用户名和密码不匹配,未找到”);
}
}
}catch(SQLException-ex){
Logger.getLogger(AccountServlet.class.getName()).log(Level.SEVERE,null,ex);
//打印(ex);
}捕获(ClassNotFoundException ex){
Logger.getLogger(AccountServlet.class.getName()).log(Level.SEVERE,null,ex);
打印(ex);
}最后{
out.close();
}
}
我又一次得到这个&又一次
java.sql.SQLException:结果集关闭后不允许操作
有错误吗?在迭代
结果集时,您正在关闭数据库连接。ResultSet
需要打开连接才能工作
您还应该确保在finally块中关闭JDBC连接。您在遍历结果集时正在关闭数据库连接。ResultSet
需要打开连接才能工作
您还应该确保在finally块中关闭JDBC连接。哪一行引发异常?顺便说一下。。。您正在创建的令人愉快的sql注入攻击。你在创建什么网站,让全世界都能从攻击中得到乐趣?该死。我期待着一个用户名:';从账户中删除;从“1”==“这不是JSP/Servlet问题”的帐户中选择。您得到了java.sql
package的异常,而不是javax.servlet
package。这只是一个JDBC问题。在普通Java类中(这段代码实际上属于该类!)执行此操作时,您会遇到完全相同的问题。我删除了不相关的JSP/Servlet标记。顺便问一下,为什么不相信DB返回了您要求它返回的行?您在WHERE
中指定了条件,但在循环中通过equals()
再次检查它们…哪一行引发异常?顺便说一下。。。您正在创建的令人愉快的sql注入攻击。你在创建什么网站,让全世界都能从攻击中得到乐趣?该死。我期待着一个用户名:';从账户中删除;从“1”==“这不是JSP/Servlet问题”的帐户中选择。您得到了java.sql
package的异常,而不是javax.servlet
package。这只是一个JDBC问题。在普通Java类中(这段代码实际上属于该类!)执行此操作时,您会遇到完全相同的问题。我删除了不相关的JSP/Servlet标记。顺便问一下,为什么不相信DB返回了您要求它返回的行?您在WHERE
中指定了条件,但在循环中通过equals()
再次检查它们……如果用户名在数据库中是严格唯一的,那么while
最好是If
。这也可以解决问题,但肯定不是正确的方法。资源关闭应该始终在中进行。如果用户名在数据库中是严格唯一的,那么而最好是如果。这也可以解决问题,但肯定不是正确的方法。资源关闭应始终在中进行。