result conn等要放到try外面来定义

解决方案 »

  1.   


    String rusult=null;
    改为
    String result=null;
      

  2.   

    1. String rusult=null;
    和下面的 result 变量名称不同.2. rs 要放到 try 外面定义.3. stmt 要放到 try 外面定义.4. conn 要放到 try 外面定义.
      

  3.   

    程序改为:
    <%@ page contentType="text/html; charset=GB2312" 
    import="java.sql.*"%>
    <%!
    String CheckLogin(String Login, String Password) throws Exception
    {
    String result=null;
     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
             String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=yanzheng"; 
               
    String user="sa"; 
    String password=""; 
    Connection conn= DriverManager.getConnection(url,user,password); 
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    String sql="select * from Login"+"where xm ='"+Login+"'"; 
    ResultSet rs=stmt.executeQuery(sql);

    if(!rs.next()) //检查记录指标是否指到最後一笔记录
    { //若记录指标在记录集一开启时便指到最後一笔记录则表示没有记录
    result = "无此帐号";
    }
    else if(!rs.getString("pass").equals(Password)) 
    { //判断密码是否正确
    result = "密码错误";
    }
    else //通过检查表示帐号与密码均正确成功登入
    {
    result = "成功登入";
    }

    rs.close(); 
    stmt.close();
    conn.close();

    return result;
    }
    %>
    <%
    String UserNm = request.getParameter("UserNm");
    //取得使用者输入的帐号
    String UserPasswd  = request.getParameter("UserPasswd");
    //取得使用者输入的密码//判断使用者帐号与密码所取得值是否为null, 是则将网页导向LogFrm.htm
    if(UserNm == null || UserPasswd == null)
    response.sendRedirect("LogFrm.jsp");String strCheckLogin = CheckLogin(UserNm, UserPasswd);
    //呼叫CheckLogin函数进行帐号与密码的检查if (strCheckLogin.equals("成功登入")) //判断是否成功登入
    {
    session.setAttribute("UserNm",UserNm); 
    //将登入帐号储存进session物件中
    session.setAttribute("UserPasswd",UserPasswd);
    //将帐号密码储存进session物件中
    response.sendRedirect("Submain.jsp");
    //将显示网页导向Submain.jsp网页
    }
    %>
    <HTML>
    <HEAD>
    <TITLE>使用者登入</TITLE>
    </HEAD>
    <BODY>
    <CENTER>
    <FONT SIZE = 5 COLOR = blue>使用者登入</FONT>
    </CENTER>
    <HR>
    <Center>
    <!--若登入失败时才会执行至下面的叙述-->
    <%= strCheckLogin %><P></P><A href = "LogFrm.jsp">请重新登入</A>
    </Center>
    </BODY>
    </HTML>
    错误为:
    org.apache.jasper.JasperException: [Microsoft][SQLServer JDBC Driver][SQLServer]Line 1: Incorrect syntax near '='.
    它说是无效的语句?
    String sql="select * from Login"+"where xm ='"+Login+"'";是不是这句?
    第一个Login是一个表名,表中有两个字段,xm和pass
    第二个Login是函数传过来的用户名。
      

  4.   

    String sql = " select * from Login " + " where xm ='" + Login + "'" ;注意空格
      

  5.   

    最好不要用select *,  另外Login"+"where 结果不就是
    Loginwhere ???????????
    遇到这种sql  的错误 最好就是 报 sql 语句 out print 出来
    然后直接拿到数据库去执行,马上就看到错误了
      

  6.   

    谢谢老大们!
    确实是空格的原因,现在能够执行了。可还有问题。
    问题是密码验证那句话可能有问题,即使你输入了正确的密码,结果显示的还是密码错误!是不是这句有毛病?else if(!rs.getString("pass").equals(Password)) 
    { //判断密码是否正确
    result = "密码错误";实际这句(!rs.getString("pass").equals(Password))什么意思,我也不明白,能否解释解释。
      

  7.   

    rs.getString("pass")获得数据库中的密码.equals(Object obj)判断是否与相同你的Password获得的时候可以先Password = Password.trim()然后
    if ( !Password.equals( rs.getString("pass")) )表示如果密码不对
      

  8.   

    谢谢xycleo()虚竹和尚()我在获取密码的时候按你的说法,去了空格,如下:String UserPasswd  = request.getParameter("UserPasswd");
    UserPasswd=UserPasswd.trim();可还是,有问题。
    输入了正确的用户名和密码后,仍然说密码错误。怎么回事呢?
      

  9.   


    当密码错误的时候,我特意让显示的结果为:result = "密码错误"+Password+rs.getString("pass");Password为页面中你输入的 密码;
    rs.getString("pass")为当有这个姓名时,从数据库中提取的密码;最后运行时,我输入一个数据库中有的用户名lxf,密码为:5855000运行结果为:使用者登入 ---------------密码错误zh1122zh1122 请重新登入 多邪门啊,密码明明相同,它还是说密码错误!!!
    痛苦中…………
    ~ ~~~ ~ ~~~ ~~