0

这是我的servlet代码...

 try {
        HttpSession session=request.getSession(true);
        String FN= (String)session.getAttribute("FN");
        String h1= request.getParameter("h1"); //contains the password value

        if(h1=="" || h1== null)
        {
            response.sendRedirect("PERROR.html");   // if no value in passwrd field

        }

  else{

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con = DriverManager.getConnection("jdbc:odbc:dsn2");
        Statement st=con.createStatement();

        String UNM= (String)session.getAttribute("uname");
        String query= "select * from img_pwd where uname='"+UNM+"' and pwd='"+h1+"')";
                  // validating from the table img_pwd

        ResultSet r= st.executeQuery(query);

        if(r.next())
        {

            con.close();


            response.sendRedirect("ACCOUNT.jsp");  //success, go to dashboard

        }
        else
        {

            response.sendRedirect("PERROR.html"); // if the password-mismatches

        }



 }


    } finally { 
        out.close();
    }

并且表格“img_pwd”如下所示——

1. uname(nvarchar[50])
2. pwd(nvarchar[20])

所以我尝试调试,发现程序执行到了查询存储在字符串中的位置,但查询没有执行,程序的进度在存储查询字符串后停止....

我无法找出错误,需要帮助..

4

4 回答 4

1

好吧,这看起来很有趣......但我现在意识到我浪费了我的 5 个小时只是因为一个右括号......

"select * from img_pwd where uname='"+UNM+"' and pwd='"+h1+"')"

你能弄清楚“)” ..??? 是的,那是错误。删除它后,代码工作正常。

于 2013-04-22T09:37:36.577 回答
0

您可以尝试以下方法:

  1. 尝试将您的查询更改为select * from table您确定应该有一些结果的地方,以确保您对数据库的访问按预期工作。
  2. 修剪开头或结尾的任何空格的“uname”和密码,这可以解释为什么您的查询找不到值,并确保您测试的值存在于数据库表中。
  3. 根据您的 DBMS,您可以考虑使用 like 运算符"%"
于 2013-04-22T09:23:07.877 回答
0

是的,从

"select * from img_pwd where uname='"+UNM+"' and pwd='"+h1+"')"

您的查询字符串应该是这样的:

从表中选择 *

于 2013-04-23T06:05:55.740 回答
0

连接数据库时可能有任何异常,您没有提到 catch 块,所以放一个 catch 和调试。

于 2013-04-22T09:28:32.133 回答