我写了一个登陆界面的程序,但是输入和数据库相匹配的用户名和密码时却不能正确进行判断,也就是“登陆”时输出else语句的内容(登录失败,请重新输入.....) 望大家帮帮忙,谢谢!
 关键的源代码如下:
</head>
<body>
<%
String use1 = request.getParameter("use");
String use2 = request.getParameter("passwd"); //加载数据库
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//连接数据库
Connection con = DriverManager.getConnection("jdbc:odbc:mytest;database=master",
"sa", "123456");
//Connection con = DriverManager.getConnection 
// ("jdbc:microsoft:sqlserver://server1:1433","sa","123456"); 
//创建statement
Statement state = con.createStatement();
//查询
ResultSet set = state
.executeQuery("select Passwd from USERS where Name='"
+ use1 + "' ");
if (set.next()) {
if (set.getString(1).equals(use2)) {
out.println("用户登陆成功");
  response.sendRedirect("logwel.jsp?user="+use1);
} else {
// response.sendRedirect("login.jsp");

out.println("登录失败,请重新输入密码"); }
} else {
//response.sendRedirect("login.jsp");
System.out.println(set.getStatement());
out.println("登录失败,请重新输入....."); }
%>
   </body>
</html>sql server数据库代码:
CREATE TABLE USERS(
Name varchar(10),
Passwd varchar(14),
IdentId varchar(30),
);
select * from USERS;insert into USERS values('张三','123456','4414221962');
insert into USERS values('韩江','654321','4414221969');
insert into USERS values('宋天明','123456','4414221962');
insert into USERS values('王强','142536','4414221972');
insert into USERS values('陈玲','789456','4414221982');

解决方案 »

  1.   

    if (set.next()) {
    if (set.getString(1).equals(use2)) {
    out.println("用户登陆成功");你在这里把resultset打印一下或者输出到页面显示下。set.getString(1),set.getString(2).
    看看到底取到的是什么。
    如果是Null有Null的处理方法,如果resultset取的值不对有想
      

  2.   

    打印出来的不是null,而是sun.jdbc.odbc.JdbcOdbcStatement@543cb1
      

  3.   

    [Quote=引用 2 楼 kebin0001 的回复:]
    出現 登录失败,请重新输入..... 表示根本沒找到值。
    最可能是因為你的帳號是中文,編碼不一致就會找不到。可以先設定一個是純英文帳號測試一下。
    ************
    我改为英文用户名却抛出一下异常
    严重: Servlet.service() for servlet jsp threw exception
    java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at org.apache.jsp.logincl_jsp._jspService(logincl_jsp.java:85)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
    没获取到数据吧?闷
      

  4.   

    //查询
    ResultSet set = state
    .executeQuery("select Passwd from USERS where Name='"
    + use1 + "' ");
    if (set.next()) {
    if (set.getString(1).equals(use2)) {
    改写:
    //查询
    ResultSet set = state
    .executeQuery("select count(*)from USERS where Name='"
    + use1.trim() + "' and passwd='"+use2.trim()+"'");
    if (set.next()) {
    if (set.getint(1)==0) {
    //可以在页面是输入测试sql语句,再运行在sql查询分析器中
      

  5.   

    SQL Server的URL需要指定访问的数据库不?我没用过,不是很清楚
      

  6.   

    發生錯誤的頁面是同一個頁面嗎?
    登入後會執行這行
    response.sendRedirect("logwel.jsp?user="+use1);所以檢查看看是不是登入後轉向到 logwel.jsp頁面,但是資料不對所以發生錯誤。但至少確認登入的問題是編碼問題了。
      

  7.   

    首先你把你从数据库中取出来的set.getString(1)给输出来,看看能不能从数据库中取出字段,如果不行,你可以set.getString(Name),我是怕你取出来的是自动编号的字段,还有你把跳转语句改为response.sendRedirect("login.jsp"); 
    你在这个语句里面添加一条语句
    else {
    // response.sendRedirect("login.jsp");
    System.err.println("连接失败"+e.getMessage()); out.println("登录失败,请重新输入密码");}
    用System.err.println("连接失败"+e.getMessage()); 来在服务器端输出你的异常
      

  8.   

    感觉是 if(set.getString(1).equals(use2))  这个判断的问题。。
      lz把set.getString(1)这个打印看看是什么。。
      

  9.   

    那樣判斷不嚴格,你打斷點進行跟蹤調試,看你每一步的值是否獲取到!用set.getString(name)去判斷
      

  10.   

    String use1 = request.getParameter("use");
    String use2 = request.getParameter("passwd");
    把这里取出来的值放到你的sql里 
    "select Passwd from USERS where Name= '"+use2+"'"在数据库里查询一下 看结果对不对 
    如果是对的 那就是下面的取值的时候有问题
      

  11.   

    set.getString(1).equals(use2)) 
    set.getString(1)
    都打印下 看看是啥