java.lang.NullPointerException 空指针异常 求解决

Raiserstar 2011-11-09 03:33:38
java.lang.NullPointerException
com.psger.dao.UserBeanDao.getUserBeanByUsername(UserBeanDao.java:33)
com.psger.servlet.LoginServlet.doPost(LoginServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.psger.servlet.EncodingFilter.doFilter(EncodingFilter.java:25)

package com.psger.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.psger.entity.UserBean;



public class UserBeanDao {

private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;

UserBean user = null;

/**
* 根据用户名取得用户对象
* @param username 传入的用户名
* @return 查询到的用户对象
*/
public UserBean getUserBeanByUsername(String userName) {
//UserBean user = null;
String sql = "SELECT * FROM tb_user WHERE userName=?";

conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userName);

rs = pstmt.executeQuery();
if(rs.next()){
user = new UserBean();
user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
}

} catch (SQLException e) {
e.printStackTrace();
}finally{
CommonDao.shutDown();
}
return user;
}

/**
* 获取所有用户列表,同时通过多表连接查询出权限
* @return
*/
public List<UserBean> getAllUsers(){
List<UserBean> user_list = new ArrayList<UserBean>();

String sql = "select u.*,r.roleName from TB_USER u,TB_ROLE r where u.roleId=r.roleId order by userId";
conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();

while (rs.next()){
user = new UserBean();

user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
user.setRoleName(rs.getString("roleName"));

user_list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
CommonDao.shutDown();
}

return user_list;
}

/**
* @param id
* @return 根据用户id,返回对应用户信息
*/
public UserBean getUserInfoById(String id) {

String sql = "select u.*,r.roleName from TB_USER u,TB_ROLE r where u.roleId=r.roleId and u.userId=?";

conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,id);

rs = pstmt.executeQuery();

if (rs.next()){
user = new UserBean();

user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
user.setRoleName(rs.getString("roleName"));


}
} catch (SQLException e) {
e.printStackTrace();
} finally {
CommonDao.shutDown();
}
return user;
}
/**
* @pramat name
* @return 根据用户名返回用户信息
*/
public UserBean getUserInfoByName(String name){

String sql = "select u.*,r.roleName from TB_USER u,TB_ROLE r where u.roleId=r.roleId and u.userName=?";

conn = CommonDao.getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);

rs = pstmt.executeQuery();

if (rs.next()){
user = new UserBean();

user.setUserId(rs.getInt("userId"));
user.setUserName(rs.getString("userName"));
user.setUserPassword(rs.getString("userPassword"));
user.setUserSex(rs.getString("userSex"));
user.setUserAge(rs.getInt("userAge"));
user.setTelephone(rs.getString("telephone"));
user.setAddress(rs.getString("address"));
user.setRoleId(rs.getInt("roleId"));
user.setRoleName(rs.getString("roleName"));

}
} catch (SQLException e) {
e.printStackTrace();
} finally {
CommonDao.shutDown();
}
return user;
}

/**
* 根据权限名获得权限ID
*/
public int getIdByRoleName(String name){

int id = 0;
String sql = "select roleId from tb_role where roleName=?";

// rs = CommonDao.query(sql,name);
try {
conn = CommonDao.getConn();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name );
rs = pstmt.executeQuery();
if (rs.next()){
id = rs.getInt("roleId");
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
CommonDao.shutDown();

}
return id;


}

/**
* 添加用户信息
*
*/
public boolean addUserInfo(UserBean ub){
String sql ="insert into TB_USER values(?,?,?,?,?,?,?,?)";

// System.out.println(ub.getUserId());
// System.out.println(ub.getUserName());
// System.out.println(ub.getUserPassword());
// System.out.println(ub.getUserSex());
// System.out.println(ub.getUserAge());
// System.out.println(ub.getTelephone());
// System.out.println(ub.getAddress());
// System.out.println(ub.getUserId());


String[] info ={ub.getUserId()+"",ub.getUserName(),ub.getUserPassword(),ub.getUserSex(),
ub.getUserAge()+"",ub.getTelephone(),ub.getAddress(),ub.getRoleId()+""};

return CommonDao.update(sql, info)>0;



}

/**
* 修改用户信息
*
*/
public boolean updateUserInfo(UserBean ub){

String sql = "UPDATE TB_USER set userName=?,userSex= ?,userAge=?,telephone=?,address=? WHERE userId=?";

String[] info={ub.getUserName(),ub.getUserSex(),
ub.getUserAge()+"",ub.getTelephone(),ub.getAddress(),ub.getUserId()+""};
return CommonDao.update(sql, info)>0;
}
/**
* 根据用户id,删除用户信息
*
*/
public boolean deleteUserById(String id){

String sql = "delete from TB_USER where userId=?";

return CommonDao.update(sql, new String[]{id})>0;
}

/**
*@param userbean
*@return 根据用户id,修改密码
*/
public boolean updateUserPasswd(UserBean userbean){

String sql = "update TB_USER set userPassword=? where userId=?";

return CommonDao.update(sql, new String[]{userbean.getUserPassword(),userbean.getUserId()+""})>0 ? true : false;
}
}


/**
*
*/
package com.psger.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import com.psger.dao.RoleRightDao;
import com.psger.dao.UserBeanDao;
import com.psger.entity.RightBean;
import com.psger.entity.UserBean;

/**
* @author Psger
*
*/
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

// 处理乱码
request.setCharacterEncoding("UTF-8");

String flag = request.getParameter("flag");

String path ="./index.jsp";

HttpSession session = request.getSession();// 用户存放用户信息
if (flag.equals("loginIn")) {
// 接收用户的输入
String username = request.getParameter("username");
String userpass = request.getParameter("password");
String input = request.getParameter("checkCode");
String rand = (String) session.getAttribute("rCode");

// 服务端验证
if (username == null || "".equals(username.trim())) {
response.sendRedirect(path);
}
if (userpass == null || "".equals(userpass.trim())) {
response.sendRedirect(path);
}
if (!input.equals(rand)) {
String msg = "<script type='text/javascript'>alert('验证码错误!');</script>";
request.setAttribute("err", msg);
request.getRequestDispatcher(path).forward(request,response);
return;
}

// 调用ado层,根据用户名取得用户对象
UserBeanDao userDao = new UserBeanDao();
UserBean user = userDao.getUserBeanByUsername(username);

// 判断
boolean result = false;
if (user != null) { // 用户名存在
if (user.getUserPassword().equals(userpass)) { // 密码也对
// 登录成功
result = true;
}
}

if (result) {
// 登录成功
// HttpSession session = request.getSession();
session.setAttribute("USER", user);
session.setAttribute("user_name", user.getUserName());// 用于防止非法登录

// 读取该用户所拥有的菜单权限
RoleRightDao roleRightDao = new RoleRightDao();
List<RightBean> list = roleRightDao.getRightsByRoleId(user
.getRoleId());

// 把list传入到firmest里去
session.setAttribute("rightList", list);

response.sendRedirect("/supermarket/jsp/main.jsp");

} else {
String msg = "<script type='text/javascript'>alert('用户名或密码错误,请重试!');</script>";
request.setAttribute("err", msg);
request.getRequestDispatcher(path).forward(request,response);
}
} else if (flag.equals("loginOut")) {
session.invalidate();

request.getRequestDispatcher("/jsp/logout.jsp").forward(request,
response);
return;
}


}

}
...全文
1211 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
DemoChen 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 leehomwong 的回复:]

com.psger.dao.UserBeanDao.getUserBeanByUsername(UserBeanDao.java:33)//就在这之前出现的问题!
[/Quote]
abcdefg123412 2011-11-09
  • 打赏
  • 举报
回复
debug
kiss_vicente 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yijianpiaohongli 的回复:]

可能错在LoginServlet 文件。
UserBeanDao userDao = new UserBeanDao();
UserBean user = userDao.getUserBeanByUsername(username);时抛出空指针。
说明我在sevlet中访问不到userDao.可以在打点logger看能不能访问到UserBeanDao
[/Quote]
太长了,看看这哥们的
张含韵 2011-11-09
  • 打赏
  • 举报
回复
我之前也是这样的问题不知道怎么解决额,问人说是什么数据库的问题,还在解决中啊……
24K純帥 2011-11-09
  • 打赏
  • 举报
回复
UserBeanDao.java:33这边看看。。
roycxshun 2011-11-09
  • 打赏
  • 举报
回复
看楼主的代码,估计没几个人会认真看,发帖子还是用一个代码格式的那个吧,这样也方便大家帮你找错误。
看一下哪行出错,如果是pstmt = conn.prepareStatement(sql);这里出错,那应该就是取不到连接,仔细检查一下数据库连接,看有没有问题
[Quote=引用楼主 raiserstar 的回复:]
java.lang.NullPointerException
com.psger.dao.UserBeanDao.getUserBeanByUsername(UserBeanDao.java:33)
com.psger.servlet.LoginServlet.doPost(LoginServlet.java:68)
javax.servlet.http.HttpServlet.servic……
[/Quote]
xuguiyi100 2011-11-09
  • 打赏
  • 举报
回复
使用debug....
信春哥考本科 2011-11-09
  • 打赏
  • 举报
回复
实话说,我很不喜欢这样的代码,太冗长了 ! 看的我头晕眼花呀 !
自己去调试吧 !
tnt2004008 2011-11-09
  • 打赏
  • 举报
回复
看看 CommonDao.getConn();这个的返回值是不是NULL
  • 打赏
  • 举报
回复
楼主真强悍,那么长的代码. 想这样的空指针异常,debug是最快的解决方法了
东方2009 2011-11-09
  • 打赏
  • 举报
回复
可能错在LoginServlet 文件。
UserBeanDao userDao = new UserBeanDao();
UserBean user = userDao.getUserBeanByUsername(username);时抛出空指针。
说明我在sevlet中访问不到userDao.可以在打点logger看能不能访问到UserBeanDao

kouyiSC 2011-11-09
  • 打赏
  • 举报
回复
只能debug一步步的看什么原因。。看看哪里为空。。。
buyang890601 2011-11-09
  • 打赏
  • 举报
回复
CommonDao 这个里面写的啥
wby13579 2011-11-09
  • 打赏
  • 举报
回复
pstmt = conn.prepareStatement(sql);
这句,说明你conn是空的。。

conn = CommonDao.getConn();
自己断点在这句看看,conn是不是为null

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧