这是我的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])
所以我试过调试,发现程序执行到达查询存储在字符串中的地方,但查询不执行,程序的进度在存储查询字符串....
后停止我无法找出错误,需要帮助。看起来很有趣…但我现在意识到,我浪费了5个小时,就因为一个结束括号。)
"select * from img_pwd where uname='"+UNM+"' and pwd='"+h1+"')"
你能弄清楚…??是的,那是个错误。删除后,代码工作正常
可能在连接数据库时出现任何异常,您没有提到catch块,因此请放置catch并调试
您可以尝试以下操作:
- 尝试将您的查询更改为
select * from table
,您确定应该有一些结果,以确保您对数据库的访问按预期工作。 - 为开头或结尾的任何空格修剪'uname'和密码,这可以解释为什么你的查询找不到值,并确保你测试的值存在于数据库表中。
- 根据您的DBMS,您可以考虑使用类似的操作符
"%"
是,从
" select *从img_pwd uname ="新墨西哥大学+"+"和pwd = " + h1 + ") "
你的查询字符串应该像这样:
select * from table