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???
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???
解决方案 »
- Executors.newCachedThreadPool();在哪调用?
- (补充和更正)Java读取TXT文档中的数据并赋值给动态数组
- 我在学习SWT,输出Jar之后执行不正常,窗口闪一下就没了,各位前辈指点……
- servlet怎么在tomcat里运行,我要的是详细的解法!!!在线等!!
- 急急急,全局变量传参问题(附精简源码)
- 在solaris上产生的文本有乱码
- 请问:怎样保存结果集啊?
- 关于byte的问题
- 【Java学习第1天】提问几个问题,期待有人指点!
- 请问哪里可以找到《JAVA技术手册实例》O,REILIY(中国电力)的习题答案?
- 请高手指教下。运行程序出现这种问题怎么解决?
- 关于线程池里的线程
估计是你set的就是null,要么,就是方法名不对
System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------");
你传进来的 pv 的值似乎就没有设定啊....
System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------");
写到// 判断是否有记录
if(rs.next())
{
// 如果有记录,则执行此段代码
// 用户是合法的,可以登陆
flag = true ;
pv.setUsername(rs.getString(1)) ;
System.out.println("成功") ;
}
里边就好了,
原因是,rs刚开始指向的是第一条记录的前边,必须rs.next(),才能让它指向第一条记录。
这个应该是从前台中了的,如果你用struct,并且配置好form,action关系,那么系统直接采用javabean机制从request中取数据赋值到form中。
rs.getstring(1),是取记录集的第一个字段的值 。没什么不同,都是对象的 一个方法,得到一返回值 。
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;
}
};
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 ;
}
};
结果:
------null----null---003--------------------为什么总是NULL???
应该是前台没有正确赋值,
连接后台的程序基本正确!我想问的就是FORM取页面值和VO取数据库值的set和get方法有什么不同吗?
基本一样
* 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;
}
}
Vo是负责装载取得的值,也就是检索的值,或着像逻辑处理层传值的。
你的pv.getUsername()=null
pv.getPassword() = null
我觉得是因为你根本就没有取得页面的值,你的检索语句根本就没有检索出来东西,
所以才没有打印出”成功“。另外
------null----null---003--------------------为什么总是NULL???
”003“哪里来的。
pv.getPassword() = null
确实是这里没取到值,但是我不能发现他那里出错了!
你是否确定将ActionForm强制转化给了UserVo对象,然后传递给后台。
debug一下,肯定能找出原因的。
不知道在哪里调用isLogin(UserVO vo)这个方法
vo传给isLogin方法
per.getPassword() ;这个是可以获到值的!
这个可以得到值,那为什么会 为 null?
pv.getUsername();
pv.getPassword();
这个就取不到值的,我也不晓得哪里出错了
System.out.println("------"+pv.getUsername()+"----"+pv.getPassword()+"-------------");得到的本身就为空了
那明显是pv的问题啊 这个对象初始化了吗?在struts-config里指定form了吗?
你用的是struts吗?如果是的话,请检查form表单和ActionForm实体。能够正确得到值,
问题应该出现在Ation里面。打断点仔细看看。