很简单的一个oracle 建的表格 admin,其中就是两行,分别是,username 和password
用一个函数根据username查询 password
代码如下:
public void queryAdmin(String username) throws SQLException{
    
     try{
     Class.forName(sDBDriver);
     }
     catch(java.lang.ClassNotFoundException e){
     System.err.println("queryAdmin:"+e.getMessage());
     }
          //initialize the query string
     String sql="select Password from Admin where Username= ?";
     ResultSet rs=null;
    
     try{
     //connect database
     conn=DriverManager.getConnection(sConnStr,"VIC","292929");
     //create PrepareStatement instance prepStmt
     PreparedStatement prepStmt=conn.prepareStatement(sql);
    
     // set the value of each "?"
     prepStmt.setString(1,username);
    
     //excute querying
     rs=prepStmt.executeQuery();
    
     if(rs.next()){
    
     setUsername(username);
     setPassword(rs.getString(1)); //password被set进了instance的一个参数
     }
     if(rs!=null) rs.close();
    
     if(prepStmt!=null)   
             prepStmt.close(); 
                if(conn!=null)   
             conn.close();   
     }
     catch(SQLException ex){
     System.err.println("Administrator queryAdmin executeQuery:"+ex.getMessage());
     }
    
    }运行的结果,不论Password是什么,getPassword()返回的都是空值,相当奇怪。各位帮我看看什么问题啊

解决方案 »

  1.   

    首先你看看你的rs.getString(1)有值没有;
    如果没有值,那么检查你的数据库里面是否有值,还有你的select Password from Admin where Username= ?这句是否正确
    这样不好猜测你哪部出错了,贴出你的异常代码吧
      

  2.   

     setPassword(rs.getString(1)); //password被set进了instance的一个参数 
    改成
     setPassword(rs.getString(”Password“)); //password被set进了instance的一个参数 
      

  3.   


    数据库有值,代码运行无异常,你说的异常代码不知从哪里看,select Password from Admin where Username= ?
    这句已经简单到不能在简单了.其实这只是我做的一个bean里的方法,在login.jsp中来验证admin的login输入的。但是我
    惊奇的发现输入正确password的时候,就会把页面导向error.jsp,反而不输入password的时候能过通过验证,很明显这个
    方法返回的是一个null的password,从而使得不输入password的时候反而通过验证了。
      

  4.   

    你把select Password from Admin where Username= ?写成不需要传递参数看看能不能把password读出。
      

  5.   

    这种肯定是你的哪个细节出问题了!!
       1.你要肯定你的sql语句确实没有错。
       2.你在setXX值的时候,与你在判断的是否为同一个domain。
    这种 东西自己debug就知道了 lZ加油啊!!
      

  6.   

    楼主可以先别管jsp页面那里,你先用单元测试或写个测试类测试一下这个方法正不正确,弄一些打印语句把查询到的结果打印出来看看,一步一步查找问题出现在哪!!
      

  7.   

     setUsername(username); 
        setPassword(rs.getString(1)); //password被set进了instance的一个参数
    楼主,不知道你这个是放在了哪里,是bean还是其他.但是觉得你set之后应该将你保存数据之后的对象返回,如果你在取数据的时候是新建了一个对象的话,那你的password就应该是空的,同时你的username也是空的. 要是username不是空的,那就是你数据库里取值取失败了. ...你把问题再详细点贴出来吧
      

  8.   

    prepStmt.setString(1,username); 
    这句代码好像错了;好像应该是这样prepStmt.setString(0,username);