JSP连接SQL,代码没有出现错误,但连接返回空指令,实在找不出原因了!!
这里是java代码:
public boolean checkAdmin(String username, String password)//检查管理员的登录名和密码是否正确
throws UserException {
//创建一个变量用于判断结果
boolean isAdmin = false;
//查询admin表的SQL语句
String selectSql = "SELECT * FROM admin WHERE username=? AND password=? ";
PreparedStatement pmst = null;
try{
//创建一个数据库连接对象
ConnectDB conn = new ConnectDB();
//执行查询语句
pmst = conn.getConnection().prepareStatement(selectSql);
//1代表查询语句中的?号,username为形参
pmst.setString(1, username);
//1代表查询语句中的?号,username为形参
pmst.setString(2, password);
//pmst.executeQuery();
ResultSet rst = pmst.executeQuery();
//判断结果是否为空,如否,说明用户名和密码是正确的
if(rst.next()){
isAdmin = true;
}
这里JSP的检测页面的代码:
<%@ page language= "java " import= "java.util.*,userJSP.* " pageEncoding= "gbk "%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+ ":// "+request.getServerName()+ ": "+request.getServerPort()+path+ "/ ";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">
<html>
<head>
<base href= " <%=basePath%> ">
<title> My JSP 'cklogin.jsp ' starting page </title>
<link rel= "stylesheet " href= "images/css.css " type= "text/css " media= "screen ">
<meta http-equiv= "pragma " content= "no-cache ">
<meta http-equiv= "cache-control " content= "no-cache ">
<meta http-equiv= "expires " content= "0 ">
<meta http-equiv= "keywords " content= "keyword1,keyword2,keyword3 ">
<meta http-equiv= "description " content= "This is my page ">
<!--
<link rel= "stylesheet " type= "text/css " href= "styles.css ">
-->
</head>
<body>
<%
String userName = request.getParameter( "username ");
String passWord = request.getParameter( "password ");
if(userName==null || (userName = userName.trim()).length() == 0) {
session.setAttribute( "error ", "登录失败,请输入您的登录名。 ");
response.sendRedirect( "error.jsp ");
}
if(passWord==null || passWord.length() == 0) {
session.setAttribute( "error ", "登录失败,请输入您的密码。 ");
response.sendRedirect( "error.jsp ");
}
UserInter objDB = UserInfoFactory.getUserInfoDB();
boolean ret = false;
boolean exception = false;
try{
ret = objDB.checkAdmin(userName,passWord);
}catch(UserExceptionappe){
exception = true;
session.setAttribute( "error ",appe.getMessage());
response.sendRedirect( "error.jsp ");
}catch(Exception e){
exception = true;
session.setAttribute( "error ", "发生异常,管理员登录失败。 ");
response.sendRedirect( "error.jsp ");
}
if(!exception){
if(!ret){
session.setAttribute( "error ", "用户名或密码错误!请重新登陆。 ");
response.sendRedirect( "error.jsp ");
}else{
session.setAttribute( "adminName_s ",userName);
response.sendRedirect( "userlist.jsp ");
}
}
%>
</body>
</html>
出错是内容是:
注: at userJSP.UserDBImpl.checkAdmin(UserDBImpl.java:77)是上面pmst = conn.getConnection().prepareStatement(selectSql);这一行的代码.
java.lang.NullPointerException
at userJSP.UserDBImpl.checkAdmin(UserDBImpl.java:77)
at org.apache.jsp.chklogin_jsp._jspService(chklogin_jsp.java:92)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
登录返回的信息是 "用户名或密码错误!请重新登陆。 "
小弟实在想不出是什么出错了,经过N次的试验都无法得出结果,
现在急着解决,请高手帮下忙吧!
有问题的可以提出来,
多谢!!!!!!!!
[解决办法]
ConnectDB conn = new ConnectDB();
这个地方,conn肯定得到了一个null
连接数据库没成功
[解决办法]
SQL部分应该没有问题的,你可以把你的ResultSet内容打印出来看看
其它自己找找看吧,太多了,不想看!
[解决办法]
NullPointerException空指针,可能取得数据连接失败了
Connection con1=conn.getConnection();//这个能成功取得数据库连接吗?
pmst = con1.prepareStatement(selectSql);