pstmt = dbc.getConnection().prepareStatement(sql) ;
System.out.println("++++sql++++"+sql);
// 设置pstmt的内容,是按name和密码验证
pstmt.setString(1,pv.getUsername()) ;
pstmt.setString(2,pv.getPassword()) ;

// 查询记录
rs = pstmt.executeQuery() ;
System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------"); // 判断是否有记录
if(rs.next())
{
// 如果有记录,则执行此段代码
// 用户是合法的,可以登陆
flag = true ;
pv.setUsername(rs.getString(1)) ;
System.out.println("成功") ;
}
// 依次关闭
rs.close() ;
pstmt.close() ;
上面是数据库验证代码,执行后
连接成功++++sql++++SELECT username FROM CMUSER WHERE username=? and password=?
------null----null---003--------------------为什么总是NULL???

解决方案 »

  1.   

    弄个断点,从action一步一步走呗
    估计是你set的就是null,要么,就是方法名不对
      

  2.   

        rs = pstmt.executeQuery() ;
                System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------");
    你传进来的 pv 的值似乎就没有设定啊....
      

  3.   


    System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------");
    写到// 判断是否有记录
                if(rs.next())
                {
                    // 如果有记录,则执行此段代码
                    // 用户是合法的,可以登陆
                    flag = true ;
                    pv.setUsername(rs.getString(1)) ;
                    System.out.println("成功") ;
                }
    里边就好了,
    原因是,rs刚开始指向的是第一条记录的前边,必须rs.next(),才能让它指向第一条记录。
      

  4.   

    username 和 password似乎都没有赋值
      

  5.   

    看看你的pv本来有没有值你的sql都是SELECT username FROM CMUSER WHERE username=? and password=? ,怎么查得出数据来?
      

  6.   

    我想问的就是FORM取页面值和VO取数据库值的set和get方法有什么不同吗?
      

  7.   

    不同的,一个是从resultSet里拿,一个是从request里拿
      

  8.   

    原因就是pv对象中没有取到值。
    这个应该是从前台中了的,如果你用struct,并且配置好form,action关系,那么系统直接采用javabean机制从request中取数据赋值到form中。
    rs.getstring(1),是取记录集的第一个字段的值 。没什么不同,都是对象的 一个方法,得到一返回值 。
      

  9.   

    VO的代码// 只包含setter和getter方法的类
    package cm.ci.info.vo;import java.util.* ;
    public class UserVo
    {
    // 表中所有字段
    private Integer id ;
    private String username ;
    private String password ;
    private String webpope ;
    private String compope ;

    //生存get和set方法
    public Integer getId() {
    return this.id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    public String getUsername() {
    return this.username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public String getPassword() {
    return this.password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    public String getWebpope() {
    return this.webpope;
    }
    public void setWebpope(String webpope) {
    this.webpope = webpope;
    }
    public String getCompope() {
    return this.compope;
    }
    public void setCompope(String compope) {
    this.compope = compope;
    }
    };
      

  10.   

    DAO代码// 具体实现DAO接口的类
    package cm.ci.info.daoimpl;//需要连接数据库
    //需要对VO的内容进行具体的验证
    import java.sql.* ;
    import cm.ci.info.dao.* ;
    import cm.ci.info.dbconn.*;
    import cm.ci.info.vo.* ;public class UserDAOImpl implements UserDAO
    {
    public boolean isLogin(UserVo pv)
    {
    boolean flag = false ;
    // 在此处成具体的数据库验证

    // 声明一个数据库操作对象
    PreparedStatement pstmt = null ;
    // 声明一个结果集对象
    ResultSet rs = null ;
    // 声明一个SQL变量,用于保存SQL语句
    String sql = null ;
    // DataBaseConnection为具体的数据库连接及关闭操作类
    DataBaseConnection dbc = null ;
    // 连接数据库
    dbc = new DataBaseConnection() ;

    // 编写SQL语句
    sql = "SELECT username FROM CMUSER WHERE username=? and password=?" ;

    try
    {
    // 实例化数据库操作对象
    pstmt = dbc.getConnection().prepareStatement(sql) ;
    System.out.println("++++sql++++"+sql);
    // 设置pstmt的内容,是按name和密码验证
    pstmt.setString(1,pv.getUsername()) ;
    pstmt.setString(2,pv.getPassword()) ;

    // 查询记录
    rs = pstmt.executeQuery() ;
    System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------"); // 判断是否有记录
    if(rs.next())
    {
    // 如果有记录,则执行此段代码
    // 用户是合法的,可以登陆
    flag = true ;
    pv.setUsername(rs.getString(1)) ;
    System.out.println("成功") ;
    }
    // 依次关闭
    rs.close() ;
    pstmt.close() ;
    }
    catch(Exception e)
    {
    System.out.println(e) ;
    }
    finally
    {
    // 最后一定要保证数据库已被关闭
    dbc.close() ;
    }
    return flag ;
    }
    };
      

  11.   

    System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------");
    结果:
    ------null----null---003--------------------为什么总是NULL???
    应该是前台没有正确赋值,
    连接后台的程序基本正确!我想问的就是FORM取页面值和VO取数据库值的set和get方法有什么不同吗?
    基本一样
      

  12.   

    /*
     * Generated by MyEclipse Struts
     * Template path: templates/java/JavaClass.vtl
     */
    package cm.ci.struts.form;import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;/** 
     * MyEclipse Struts
     * Creation date: 07-05-2009
     * 
     * XDoclet definition:
     * @struts.form name="loginForm"
     */
    public class LoginForm extends ActionForm {
    /*
     * Generated fields
     */ /** password property */
    private String password; /** username property */
    private String username; /*
     * Generated Methods
     */ /** 
     * Method validate
     * @param mapping
     * @param request
     * @return ActionErrors
     */
    public ActionErrors validate(ActionMapping mapping,
    HttpServletRequest request) {
    // TODO Auto-generated method stub
    ActionErrors errors = new ActionErrors() ;
    if(this.username==null||"".equals(this.username)){
    errors.add("username", new ActionMessage("username.null")) ;
    }
    if(this.password==null||"".equals(this.password)){
    errors.add("password", new ActionMessage("password.null")) ;
    }
    return errors;
    } /** 
     * Method reset
     * @param mapping
     * @param request
     */
    public void reset(ActionMapping mapping, HttpServletRequest request) {
    // TODO Auto-generated method stub
    } /** 
     * Returns the password.
     * @return String
     */
    public String getPassword() {
    return password;
    } /** 
     * Set the password.
     * @param password The password to set
     */
    public void setPassword(String password) {
    this.password = password;
    } /** 
     * Returns the username.
     * @return String
     */
    public String getUsername() {
    return username;
    } /** 
     * Set the username.
     * @param username The username to set
     */
    public void setUsername(String username) {
    this.username = username;
    }
    }
      

  13.   

    可以获取到FROM的值,我已经试过了,就是后台数据库的值没拿到!
      

  14.   

    贴controller,拿是拿到了,但是没把表单的值赋值给UserVo
      

  15.   

    Form里的值是从页面取来的,form最好不要进入到逻辑处理层面,
    Vo是负责装载取得的值,也就是检索的值,或着像逻辑处理层传值的。
    你的pv.getUsername()=null
    pv.getPassword() = null 
    我觉得是因为你根本就没有取得页面的值,你的检索语句根本就没有检索出来东西,
    所以才没有打印出”成功“。另外
    ------null----null---003--------------------为什么总是NULL???
    ”003“哪里来的。
      

  16.   

    pv.getUsername()=null 
    pv.getPassword() = null 
    确实是这里没取到值,但是我不能发现他那里出错了!
      

  17.   

    估计是你没有set进去,那get怎么可能有值
      

  18.   

    如果你采用的struts,我觉得是你在action中出现的问题。
    你是否确定将ActionForm强制转化给了UserVo对象,然后传递给后台。
    debug一下,肯定能找出原因的。
      

  19.   

    兄弟你没获取到form 的值啊。set 方法没有生效。检查一下吧。
      

  20.   

    我在页面上的取的值username和password都已经取到了,而且我试过能打印出来的,只是在VO类的值取不到,但是找不到哪里出错了!
      

  21.   

    调用 UserDAOImpl 类里面的方法之前,你把form 里的值赋给vo了吗? 没有看到你的中间过程啊
      

  22.   


    不知道在哪里调用isLogin(UserVO vo)这个方法
      

  23.   

    调用之前先把值使用set方法放到new的vo中,然后再把
    vo传给isLogin方法
      

  24.   

    你的from中的值赋给你的实体了么
      

  25.   

    per.getUsername() ;
    per.getPassword() ;这个是可以获到值的!
      

  26.   


    这个可以得到值,那为什么会 为 null?
      

  27.   

    是啊,我是说了页面的FROM是可以取到值的,但是在数据库里面的VO类的
    pv.getUsername();
    pv.getPassword();
    这个就取不到值的,我也不晓得哪里出错了
      

  28.   

    pv是什么啊?
      System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------");得到的本身就为空了
      

  29.   

    从数据库查到数据后应该pv.setuserName(rs.getString(Username));
      

  30.   


    那明显是pv的问题啊 这个对象初始化了吗?在struts-config里指定form了吗?
      

  31.   

    pv没有赋值,请检查调用的时候正确传递pv.
    你用的是struts吗?如果是的话,请检查form表单和ActionForm实体。能够正确得到值,
    问题应该出现在Ation里面。打断点仔细看看。