括起来更不能,我试过了,这是在servlet中实现,不是worksheet!

解决方案 »

  1.   

    调试出执行的sql,放到数据库中看一下,
    是sql的问题把
      

  2.   

    你给出的部分代码应该没有问题,你再帖多些代码,是不是你传入SQL语句的logname和password有问题啊。
      

  3.   

    在worksheet中用:SELECT * FROM member WHERE logname =‘hu’ AND password =‘hu’;
    但是在servlet中好像只能用SELECT * FROM member WHERE logname =? AND password =?吧?
    我用户注册的代码可以正确执行,可以写入数据!
      

  4.   

    package myservlet.control;
    import mybean.data.*;
    import java.sql.*;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class HandleLogin extends HttpServlet
    {   public void init(ServletConfig config) throws ServletException
        { super.init(config);
          try {  Class.forName("oracle.jdbc.driver.OracleDriver");
              }
           catch(Exception e){} 
        }
       public String handleString(String s)
       {   try{ byte bb[]=s.getBytes("iso-8859-1");
                s=new String(bb);
              }
           catch(Exception ee){} 
           return s;  
       }
       public  void  doPost(HttpServletRequest request,HttpServletResponse response) 
                            throws ServletException,IOException
        {   Connection con; 
            PreparedStatement sql; 
            Login loginBean=null;
            String backNews="";
            HttpSession session=request.getSession(true);
            try{  loginBean=(Login)session.getAttribute("login");
                  if(loginBean==null)
                  { loginBean=new Login();  
                    session.setAttribute("login",loginBean);
                  }
               }
            catch(Exception ee)
              {  loginBean=new Login();  
                 session.setAttribute("login",loginBean);
              }
            String logname=request.getParameter("logname").trim(),
            password=request.getParameter("password").trim();
            boolean ok=loginBean.getSuccess();
            logname=handleString(logname);
            password=handleString(password);
            if(ok==true&&logname.equals(loginBean.getLogname()))
            {  backNews=logname+"已经登录了";
               loginBean.setBackNews(backNews);
            }
            else
            {  String uri="jdbc:oracle:thin:@127.0.0.1:1521:HU";
               boolean boo=(logname.length()>0)&&(password.length()>0);  
               try{ con=DriverManager.getConnection(uri,"huyanqiang","hu48934");
                    String condition="SELECT * FROM member WHERE logname =? AND password =?";
                    sql=con.prepareStatement(condition);  
                    if(boo)
                    { sql.setString(1,logname);
                      sql.setString(2,password);
                      ResultSet rs=sql.executeQuery();
                      if(rs.next()==true)
                      {  backNews="登录成功";
                         loginBean.setBackNews(backNews);
                         loginBean.setSuccess(true);
                         loginBean.setLogname(logname);
                      }
                     else
                      {  backNews="您输入的用户名不存在,或密码不般配+1"+rs;
                         loginBean.setBackNews(backNews); 
                         loginBean.setSuccess(false); 
                         loginBean.setLogname(logname);
                         loginBean.setPassword(password);
                      }
                    }
                    else
                    { backNews="您输入的用户名不存在,或密码不般配+2";
                      loginBean.setBackNews(backNews); 
                      loginBean.setSuccess(false); 
                      loginBean.setLogname(logname);
                      loginBean.setPassword(password);
                    }
                    con.close();
                  }
               catch(SQLException exp)
                 {  backNews=""+exp;
                    loginBean.setBackNews(backNews); 
                    loginBean.setSuccess(false); 
                 }
            }
           RequestDispatcher dispatcher=request.getRequestDispatcher("showLoginMess.jsp");
           dispatcher.forward(request, response);
        }
       public  void  doGet(HttpServletRequest request,HttpServletResponse response) 
                            throws ServletException,IOException
        {   doPost(request,response);
        }
    }
    全部代码如上!
      

  5.   

    我看过了,没有乱码!用worksheet可以正常工作,注册功能也可以正常实现!
      

  6.   

    并不是在servlet中必须用这种形式,而是因为采用这种形式可以避免别人恶意破坏。
      

  7.   

    你把接受到的用户名和密码在servlet中输出看看是否和你输入的一样,我估计是中文乱码问题
      

  8.   

    按楼上的说法,我从servlet中输出了,和输入的一样,不是中文乱码问题!
      

  9.   

    if(boo) { 
    sql.setString(1,request.getParameter("logname")); 
    sql.setString(2,request.getParemeter("password")); 
    ResultSet rs=sql.executeQuery(); 
    if(rs.next()==true) {  
    backNews="登录成功"; 
    loginBean.setBackNews(backNews); 
    loginBean.setSuccess(true); 
    loginBean.setLogname(logname); 

    我认为是PreparedStatement对象在设置指定的logname和password时,参数的传递出问题了,建议打印这两个参数的值.
      

  10.   

    我打印出rs的值为:oracle.jdbc.driver.OracleResultSetImpl@9b1670
    我打印出sql的值为:oracle.jdbc.driver.OraclePreparedStatement@160bf50
      

  11.   

    我打印出condition的值为:SELECT * FROM member WHERE logname =? AND password =?
      

  12.   

    好像condition的值不应该是那样的?怎么办?哪里错了!
      

  13.   

    是要打印request.getParameter("logname")和request.getParameter("password");
      

  14.   


    我那个肯定是对的,现在我发现sql.setString(1,logname); 
                      sql.setString(2,password); 
    这两句好像不起作用!
      

  15.   

    我觉的if(rs.next()) 
                      {  backNews="登录成功"; 
                        loginBean.setBackNews(backNews); 
                        loginBean.setSuccess(true); 
                        loginBean.setLogname(logname); 
    你在这里用的是if它只是判断你取出来的第一个对象符不符合你的要求,不符合就就进入了else,你把if(rs.next())
    换成while(rs.next())试试看
      

  16.   

    我就是只用第一个对象判断啊,可是我 
                         if(boo)
                    { sql.setString(1,logname);
                      sql.setString(2,password);
                      ResultSet rs=sql.executeQuery();
                      
                      String a=rs.getString("logname");
                      if(rs.next())
                      {  backNews="登录成功";
                         loginBean.setBackNews(backNews);
                         loginBean.setSuccess(true);
                         loginBean.setLogname(logname);
                      }
                     else
                      {  backNews="您输入的用户名不存在,或密码不般配+1"+a;
                         loginBean.setBackNews(backNews); 
                         loginBean.setSuccess(false); 
                         loginBean.setLogname(logname);
                         loginBean.setPassword(password);
                      }
    编译时说我没有使用next()方法;当我这样写时: if(boo)
                    { sql.setString(1,logname);
                      sql.setString(2,password);
                      ResultSet rs=sql.executeQuery();
                      boolean b=rs.next();
                      String a=rs.getString("logname");
                      if(b==true)
                      {  backNews="登录成功";
                         loginBean.setBackNews(backNews);
                         loginBean.setSuccess(true);
                         loginBean.setLogname(logname);
                      }
                     else
                      {  backNews="您输入的用户名不存在,或密码不般配+1"+a;
                         loginBean.setBackNews(backNews); 
                         loginBean.setSuccess(false); 
                         loginBean.setLogname(logname);
                         loginBean.setPassword(password);
                      }
    又提示说:用尽的 Resultset
      

  17.   

    把你表结构贴出来,我认为你是在
    sql.setString(1,logname); 
    sql.setString(2,password); 
    出的问题,表的字段和你设置的索引没有对应上.
      

  18.   

    logname password email  就这三个字段!
      

  19.   

    你的代码是没有问题的啊,估计是sql查询的问题啊,你先在sql命令中查询一下,看用这个语句能否查出啊,要不还有可能就是字符串编码的问题啊 
      

  20.   

    我用worksheet查询可以查出来!
      

  21.   

    我看了一下你的代码,没看出来问题,呵呵 。  
    你可以试下插入一个英文的logname,password,试下看看能不能查出来
      

  22.   

    换用String condition="SELECT * FROM member WHERE logname ='"+logName+"' AND password ='"+passWord+"'"; 
    看能不能出来!!!
      

  23.   

    这两句不是没有起作用,因为在servlet中输出的condition也是只进行初始化的sql语句,你在servlet里追踪也好,javabean里追踪也好,都只能输出只进行了初始化的sql
      

  24.   

    我觉得是sql的问题。回头我瞧瞧
      

  25.   

    先写个固定的sql看看能不能把数据查出来
      

  26.   

    另外说一下楼主这个sql有漏洞,比如对方传入帐号密码均为
    'or''='rs.next() 一定要拿出来
    rs.getString("user").equals(user)
    取出来的职一定要和传入的值比较下是不是一个.
      

  27.   

    如果你不闲麻烦的话 加我QQ357382027 把代码给我 我帮你调调看看什么原因额 算了公司不让上QQ
    MSN:[email protected] 不闲麻烦就加我给你解决
      

  28.   

    先打印出来你的name 和password  我怀疑是你的name 和password的问题 比如 是乱码
      

  29.   


    你错了,使用占位符是不会发生sql注入的漏洞的
      

  30.   

    楼主你最好把你logname和password打印出来看一下
      

  31.   

    排除乱码:全用英文的账号和密码
    sql问题:在查询呢分析器上运行下代码
      

  32.   

    输出查询前后的username,password 看看是什么
      

  33.   

    建议你将SQL语句打印出来,然后复制到查询分析器中运行,再看结果;要不就是你的数据库中的数据有问题,如:字段值中存在空格
      

  34.   


    package com.chris.test.servlet;import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class MyServletTest extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    String logname=req.getParameter("name");
    String password=req.getParameter("password");
    String backNews;
    try{
     Class.forName("oracle.jdbc.driver.OracleDriver");
     Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:8000:DEV", "test", "test");
     PreparedStatement pstm=null;
     String condition="SELECT * FROM member WHERE logname =? AND password =?"; 
     pstm=con.prepareStatement(condition);  
     pstm.setString(1,logname); 
             pstm.setString(2,password); 
               ResultSet rs=pstm.executeQuery(); 
               if(rs.next()) 
               {  backNews="登录成功"; 
               } 
             else 
               {  backNews="您输入的用户名不存在,或密码不般配+1"+rs; 
               }
               System.out.println(backNews);
    }catch(Exception e){
    throw new ServletException(e);
    }
      } protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    doGet(req,resp);
    }

    }
    我访问这个Servlet就是好的。
    LZ试试http://localhost:8000/servlet/com.chris.test.servlet.MyServletTest?name=chris&password=123456
      

  35.   

    你数据库插入数据后别忘记commit
      

  36.   

    password=request.getParameter("password").trim();  password 在哪定义的? 呵呵  这只是个小问题
    另外 你看看你数据库中的数据左右有没有空格?
      

  37.   

    对,这个非常有可能,看看你的是varchar类型的,还是char类型的。最好设为varchar类型的