求助高手,对数据库操作出现问题,恳请帮忙!
我做毕业设计是用jsp+struts,我在做登陆验证的时候在LogonAction里查询数据库的时候出现问题,搞不明白。
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.NullPointerException
com.smsystem.LogonAction.execute(LogonAction.java:41)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.
我在LogonAction里查询数据库的语句为:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
LogonForm logonForm = (LogonForm) form;
String username = logonForm.getUsername();
String password = logonForm.getPassword();
String flag=logonForm.getFlag();
sql_data db = new sql_data();
try{
ResultSet rs = db.executeQuery("select * from admin where AdminName='"+username+"' and AdminPwd='"+password+"'");
if(rs.next()){
HttpSession session = request.getSession();
session.setAttribute("username", username);
}else{
logonForm.reset(mapping,request);
return (mapping.findForward("failure"));
}
}catch(SQLException ex){
System.out.print("Logon Error£º" + ex.getMessage());
}finally{
db.closeConn();
}
return (mapping.findForward("success"));
}
有哪位帮我看看我到底什么地方做错了,我搞了很长时间都没搞好。恳请各位老大帮忙,在线等~~~~~
问题点数:100、回复次数:13Top
1 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-05-03 18:15:43 得分 0
LogonAction.java:41
41行有空指针异常 你的41行具体是哪一句
Top
2 楼woaxx(草帽)回复于 2006-05-03 18:19:45 得分 0
41行是:
ResultSet rs = db.executeQuery("select * from admin where AdminName='"+username+"' and AdminPwd='"+password+"'");
Top
3 楼sheep219(sheep219)回复于 2006-05-03 18:23:29 得分 0
sql_data db = new sql_data();
try{
ResultSet rs = db.executeQuery("select * from admin where AdminName='"+username+"' and AdminPwd='"+password+"'");
你这里的db返回的是什么啊Top
4 楼sheep219(sheep219)回复于 2006-05-03 18:25:07 得分 0
最好把sql_data这个类也贴出来了。Top
5 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-05-03 18:25:49 得分 0
username
password
可能有null
把这两行加在41行前面然后试试看
System.out.println(password);
System.out.println(username);
Top
6 楼woaxx(草帽)回复于 2006-05-03 18:26:22 得分 0
下面是sql_data的代码:
package com.smsystem;
import java.sql.*;
public class sql_data {
String sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url =
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=student";
//pubsΪÄãµÄÊý¾Ý¿âµÄ
String user = "sa";
String password = "";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
public sql_data() {
try {
Class.forName(sDBDriver);
} catch (java.lang.ClassNotFoundException e) {
System.err.println("sql_data(): " + e.getMessage());
}
}
public void executeInsert(String sql) {
try {
//conn = DriverManager.getConnection(url,user,password);
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
} catch (SQLException ex) {
System.err.println("sql_data.executeUpdate:" + ex.getMessage());
}
}
public ResultSet executeCount(String sql) {
try {
//conn = DriverManager.getConnection(url,user,password);
conn = DriverManager.getConnection(url, user, password);
stmt =
conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.err.println("sql_data.executeUpdate:" + ex.getMessage());
}
return rs;
}
public ResultSet executeQuery(String sql) {
try {
conn = DriverManager.getConnection(url, user, password);
stmt =
conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.err.println("sql_data.executeQuery:" + ex.getMessage());
}
return rs;
}
public void executeUpdate(String sql) {
try {
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
} catch (SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
}
public void executeDelete(String sql) {
try {
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
} catch (SQLException ex) {
System.err.println("sql_data.executeDelete:" + ex.getMessage());
}
}
public void closeStmt() {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void closeConn() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Top
7 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-05-03 18:28:51 得分 0
这个数据库操作的类没有问题
也没有报异常
应该是你的loginform里面没有相对应的属性值,所以拼sql的时候抛了异常Top
8 楼woaxx(草帽)回复于 2006-05-03 18:33:54 得分 0
谢谢,那我应该怎么做?我是新手,不懂的东西太多了。Top
9 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-05-03 18:35:54 得分 0
你的登陆的jsp和ActionForm类贴出来看看吧
Top
10 楼woaxx(草帽)回复于 2006-05-03 18:41:59 得分 0
登陆的jsp中我就做了两个表单,一个username,一个password,action="logon.do"Top
11 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-05-03 18:43:57 得分 0
System.out.println(password);
System.out.println(username);
你加入这两句试试
看究竟有没有得到值
然后才能判断Top
12 楼sunday_boy2006()回复于 2006-05-04 16:52:28 得分 0
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
LogonForm logonForm = (LogonForm) form;
..............
中的form没有初始化,试null!!!!!
不知道说的对不对!!!!!Top
13 楼PopKaven(岁寒)回复于 2006-05-04 19:04:18 得分 0
不知与数据库建立连接是否成功,如果没成功的话conn的值就是null,那么在你执行stmt = conn.createStatement();的时候就会产生NullPointException而你又没有对
NullPointException进行处理,所以该异常就会在41行产生。我说的这些是在与数据库建立连接不成功的情况下出现。不知道你的是否这样。Top




