package com.fuyou.servlet;import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.fuyou.util.DBConnection;
import com.fuyou.util.mvconnection;public class loginservlet extends HttpServlet {
private DBConnection dbc = new DBConnection(); private static final long serialVersionUID = -3265621922663327137L; public loginservlet() { } public void destroy() {
super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String conformPswd = "";
String sql = "select * from user where username='" + username + "'"; ResultSet rs = null;
mvconnection mvc = new mvconnection();
if (mvc != null) {
rs = mvc.getResultSet(sql);
} else {
return;
}
if (rs != null) {
try {
if (rs.getString("password") != null) {
conformPswd = rs.getString("PASSWORD");
}
return;
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.dbc.closeResultSet(rs);
}
}
if (password.equals(conformPswd)) { } } public void init() throws ServletException { }}
异常信息:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception java.lang.NullPointerException
com.mysql.jdbc.ResultSet.buildIndexMapping(ResultSet.java:596)
com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:946)
com.mysql.jdbc.ResultSet.getString(ResultSet.java:5613)
com.fuyou.servlet.loginservlet.doPost(loginservlet.java:50)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

解决方案 »

  1.   

    哪是第50行哦,数了半天数到try去了,看来代码给的不准确哟。
      

  2.   

      if (rs.getString("password") != null) {
    这是第50行
      

  3.   

    不可能哟,你上头已经判断了rs != null咯,下面咋也没有其他可能是null咯,再查查撒。
      

  4.   

    mvconnection mvc = new mvconnection();
    mvc.getResultSet(sql);
    把这mvconnection类及相关代码贴上来
      

  5.   

    package com.fuyou.util;import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;public class mvconnection { private DBConnection dbC = new DBConnection(); public ResultSet getResultSet(String sql) {
    ResultSet rs = null;
    Statement stmt = null;
    Connection con = null;
    con = this.dbC.getConnection();
    if (con != null) {
    try { stmt = con.createStatement();
    if (stmt != null) {
    rs = stmt.executeQuery(sql);
    } else {
    return null;
    } } catch (SQLException e) {
    e.printStackTrace();

    return rs; } else {
    return null;
    } }
    }
      

  6.   

    哦,好像有点儿明白了,原来是因为column不存在,所以不是你代码里的null,而是mysql驱动里出现了null。原来如此。com.mysql.jdbc.ResultSet.buildIndexMapping(ResultSet.java:596)
    唉。老花眼啦。("password") ,这一行啊,怕是在数据库里不存在吧?如果确实不是数据库,就可能是驱动包本身有问题了,咱们也懒得看他的代码,要不换个别的版本?
      

  7.   

    com.mysql.jdbc.ResultSet.buildIndexMapping
    rs在创建索引对象影射的时候null了 是不是缺这种之类的
    rs.hasNext()
    试试吧
      

  8.   

    conformPswd = rs.getString("password");
    把user表的结构发上来
      

  9.   

    +------------------+------------------+------+-----+---------+----------------+
    | Field            | Type             | Null | Key | Default | Extra          |
    +------------------+------------------+------+-----+---------+----------------+
    | id               | int(10) unsigned | NO   | PRI | NULL    | auto_increment || USERNAME         | varchar(20)      | NO   |     |         |                || PASSWORD         | varchar(20)      | NO   |     |         |                || PASSWORDQUESTION | varchar(45)      | YES  |     | NULL    |                || PASSWORDANSWER   | varchar(45)      | YES  |     | NULL    |                || RESUMEINFO       | varchar(45)      | NO   |     |         |                || ISENROLL         | char(2)          | NO   |     |         |                || ISAUDIT          | char(2)          | NO   |     |         |                |+------------------+------------------+------+-----+---------+----------------+
      

  10.   

    你的这段程序好像不怎么对:
            if (rs != null) {
    应当转换成:
            if (rs != null && rs.hasNext() ) {
                rs.next();
                .....
     
      

  11.   

    /* 验证方法 */
    public boolean valieLogin(String userName,String passWord) {
    boolean sucess = false; Connection conn = null;
    PreparedStatement pst = null;
    ResultSet rs = null;
    conn = DBConnection.getSQL();
    try {
    pst = conn
    .prepareStatement("select * from user_login where userId=? and userPass=?");
    pst.setString(1,userName);
    pst.setString(2, passWord);
    rs = pst.executeQuery();
    if (rs.next()) { sucess = true;
    }
    } catch (SQLException e) {

    e.printStackTrace(); } finally { try {
    if (rs != null) {
    rs.close();
    rs = null;
    }
    if (pst != null) {
    pst.close();
    pst.close();
    }
    if (conn != null) {
    conn.close();
    conn = null;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } return sucess; }
      

  12.   

    11楼大哥,我查了api没找到rs.hasNext()方法!1.5版
      

  13.   

    那应该是next了ResultSet rs=s.executeQuery("select * from friends");……如果想直接用rs.getXXX(X)的方法读取第一行的数据时会出现异常,这是由于初始的记录指针指向的是第一条记录的上一条记录,也就是第0条记录,当然实际不存在第0条记录,所以就会出现异常。所以一般如果要顺序读出所有记录一般用一下的一个循环:while(rs.next())
    {}这样就可以避免出现异常。
      

  14.   

    sorry, ResultSet没有hasNext()方法,而应当使用next()方法。将
            if (rs != null) { 
    转换成: 
            if (rs != null && rs.next()) { 
                
    其原因dracularking已经说得很清楚了。