问题描述:
  在登陆界面时候想检查帐户和密码。数据由mysql数据库存储。
  可以添加用户和密码,可是从数据库读出数据时候结果集总是为空。
  下面是我的几个文件。文件一:连接数据库文件DBConnection.javapackage com.news.db;
import java.sql.*;//连接数据库的工具类
public class DBConnection {

    /*
    *一个static方法,返回一个数据库的连接。
    *这样达到了对数据库连接统一控制的目的。
    */
   public static Connection getConnection(){
        Connection con=null;
        String CLASSFORNAME="org.gjt.mm.mysql.Driver";
        String SERVANDDB="jdbc:mysql://我的IP地址:3306/news";
        String USER="root";
        String PWD="root";
       
    try{
    Class.forName(CLASSFORNAME);
    con=DriverManager.getConnection(SERVANDDB,USER,PWD);
   
    }catch(Exception e){
    e.printStackTrace();  
        
    }
    return con;
 }
}
文件二:Login.javapackage com.news.obj;import java.io.*;public class Login implements Serializable{

   private String acct;
   private String pwd;
   
   //get方法
   public String getAcct(){
      return acct;
    }
   
   public String getPwd(){
      return pwd;
    }
   
   //set方法
   public void setAcct(String acct){
      this.acct=acct;
    }
   
   public void setPwd(String pwd){
      this.pwd=pwd;
    }
}
文件三:package com.news.util;import java.sql.*;
import com.news.obj.Login;
import com.news.db.DBConnection;public class LoginBean{
     
      private Connection con;
    
    //构造方法,获得数据库的连接
    public LoginBean(){
         this.con=DBConnection.getConnection();    
    }
    
    public void addLogin(Login log) throws Exception{
          PreparedStatement pstmt=con.prepareStatement("insert  into  log  values(?,?)");
         
          pstmt.setString(1,log.getAcct());
          pstmt.setString(2,log.getPwd());
         
          pstmt.execute();
     }
    
    public void modifyLogin(Login log) throws Exception{
            PreparedStatement pstmt=con.prepareStatement("update  log  set  pwd=?  where acct=?");
              
              pstmt.setString(1,log.getPwd());
              pstmt.setString(2,log.getAcct());
              
              pstmt.execute();
     }
    
     public Login getLoginInfo(String acc) throws Exception{
          Statement stmt=con.createStatement();
          ResultSet rst=stmt.executeQuery("select * from log where acct=' " +acc+ " ' ");
         
          Login temp=null;          
          while( rst.next() ){
                        temp=new Login();      
             temp.setAcct(rst.getString("acct"));
             temp.setPwd(rst.getString("pwd"));             
          }
              rst.close();
              stmt.close();
          return temp;
     }
    
}这是所有的类文件。2楼发表我的JSP文件

解决方案 »

  1.   

    <%@ page contentType="text/html; charset=gb2312" language="java" import="com.news.obj.*" errorPage="" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>登陆结果</title>
    </head><jsp:useBean id="loginBean" class="com.news.util.LoginBean" scope="page"   /><body>
      <%
        //从前一页读取帐户和密码,再和数据库中的进行比较。
       //可以log.getAcct();这里就发生问题。
    Login log=loginBean.getLoginInfo(account);
    log.getAcct();
      *>
    </body>
    </html>这是出错信息:type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:565)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    root cause java.lang.NullPointerException
    org.apache.jsp.ava.admin.log_005fdo_jsp._jspService(log_005fdo_jsp.java:79)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.7 logs.
      

  2.   

    ResultSet rst=stmt.executeQuery("select * from log where acct=' " +acc+ " ' ");
    你加空格干吗?
      

  3.   

    ResultSet rst=stmt.executeQuery("select * from log where acct=' " +acc+ " ' ");
    acct=' " +acc+ " ' "
          *         *   这两处有空格吗?有的话,去掉.
    后台输出sql,看看sql对错.
      

  4.   

    ResultSet rst=stmt.executeQuery("select * from log where acct='" +acc+ "' ");