问题描述:
在登陆界面时候想检查帐户和密码。数据由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文件
在登陆界面时候想检查帐户和密码。数据由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文件
<!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.
你加空格干吗?
acct=' " +acc+ " ' "
* * 这两处有空格吗?有的话,去掉.
后台输出sql,看看sql对错.