Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:结果集关闭后不允许操作_Java_Jdbc_Sqlexception - Fatal编程技术网

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
。这也可以解决问题,但肯定不是正确的方法。资源关闭应该始终在
中进行。如果用户名在数据库中是严格唯一的,那么
最好是
如果
。这也可以解决问题,但肯定不是正确的方法。资源关闭应始终在
中进行。