注册 登录
编程论坛 J2EE论坛

JSP连数据库错误

しΟν∈→鱈 发布于 2007-01-23 14:01, 1485 次点击

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NullPointerException
    org.apache.jsp.register.register_jsp._jspService(register_jsp.java:71)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    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.28 logs.

什么意思哦。。。

26 回复
#2
无理取闹2007-01-23 14:03
写着空指针异常呢啊
#3
しΟν∈→鱈2007-01-23 14:04

知道啊  但是不知道去哪找哎。。。

#4
无理取闹2007-01-23 14:07

你自己都找不到 别人怎么能找到呢

#5
しΟν∈→鱈2007-01-23 14:11
不是啊   这个上面的提示好像都不是我的程序里的啊。。
要不我帖上我的代码   版主帮我看下喽

#6
しΟν∈→鱈2007-01-23 14:14
[CODE]

DBConnect代码:
package com.simon.db;

import java.sql.*;
import java.util.*;

public class DBConnect {

public DBConnect() {
}

public static Connection getConnection() {
ResourceBundle rb = ResourceBundle.getBundle("db");

try {
String driverName = rb.getString("db.driver");
Driver dirver = (Driver)Class.forName(driverName).newInstance();
String url = rb.getString("db.url");
Connection con = DriverManager.getConnection(url);
return con;

} catch(ClassNotFoundException cnfExc) {
System.out.println(cnfExc.getMessage());
cnfExc.printStackTrace();

} catch(SQLException sqlExc) {
System.out.println(sqlExc.getMessage());
sqlExc.printStackTrace();

} catch(IllegalAccessException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch(Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return null;
}

public static void main(String[] args) throws Throwable{
//Connection con = getConnection();
//Statement stmt = con.createStatement();
}
}

[/CODE]
#7
无理取闹2007-01-23 14:15
应该是你的程序有问题 向数据库插入数据常常出现空指针异常
仔细检查 就可以了
(我可不是这个版的斑竹
#8
しΟν∈→鱈2007-01-23 14:15
[CODE]

register2.jsp代码:
<%@ page language="java" import="java.sql.*" pageEncoding="gb2312" errorPage=""%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<base href="http://localhost:8080/JSPExercise/">

<title>My JSP 'regist2.jsp' page</title>

<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 background="../PIC/bg2.jpg">
<form name = "register" action = "register/register.jsp" method = "post">
<TABLE cellSpacing="0" cellPadding="0" width="610" align="center" border="0">
<tr>
<td width="610" height="50"><font size="4" color="#2d5bbb">&nbsp;注册步骤:
1.阅读使用手册 -> <font color=red>2.选择用户名,填写个人资料 </font>-> 3.注册成功</font></table>
<tr>
<TABLE cellSpacing="0" cellPadding="0" width="492" align="center" border="0">
<tr>
<td width="86" height="42"> 用户名:
<td width="406"><input type = "text" name = "name" size = "20"><font color="red">*(你在班级的真实姓名)</font>
<tr>
<td width="86" height="42">密码:
<td><input type = "password" name = "password" size = "20"><font color="red">*(你的学号)</font>
<tr>
<td width="86" height="42">确认密码:
<td><input type = "password" name = "checkpassword" size = "20"><font color="red">*</font>
<tr>
<td height="20">性别
<td>男 <input type = "radio" name = "sex" checked="checked">
  女 <input type = "radio" name = "sex"><font color="red">*</font>
<tr>
</table>
<br><table width="495" height="130" align = "center">
<tr>联系方式:<br><br>
<td width="492">
<p>1:手机号码: <input type = "text" name = "mobelphone" size = "20"><br><br>
2:QQ号码:  <input type = "text" name = "QICQ" size = "20"><br><br>
3:邮箱:  <input type = "text" name = "E-mail" size = "20"><br><br>
4:详细住址: 
<input type = "text" name = "province" size = "10">省
<input type = "text" name="city" size="10">市
<input type = "text" name = "street" size = "20"><br>
<p align = "center"><font color = "#2d5bbb">带*号的必填,联系方式好歹给个面子填上一个吧!</font></p>
</table>
<p align = "center"><input type = "image" src = "PIC/commit2.gif">
</form>
</body>
</html>

[/CODE]
#9
しΟν∈→鱈2007-01-23 14:16
[CODE]register.jsp代码:
<%@ page language="java" import="com.simon.db.*,java.sql.*,java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
String name = request.getParameter("name");
String ID = request.getParameter("password");
String checkID = request.getParameter("checkpassword");
String sex = request.getParameter("sex");
String mobelphone = request.getParameter("mobelphone");
String qq = request.getParameter("QICQ");
String Email = request.getParameter("E-mail");
String province = request.getParameter("province");
String city = request.getParameter("city");
String SQLCommand = "insert into Student_info values('"
+ ID + "', " + 1 + ", '" + province + "', '" + city + "', "
+ null + "', '" + mobelphone + "', '" + qq + "', '" + Email +"');";
%>
<%
Connection con = DBConnect.getConnection();
Statement stmt = con.createStatement();
stmt.execute(SQLCommand);
con.close();
response.sendRedirect("register/registersuccess.jsp");
%>
[/CODE]
#10
支离破碎2007-01-23 14:17
一般空指针出现肯定是没对象你就在用,你看你页面表现的时候的一些操作,是否有值
#11
しΟν∈→鱈2007-01-23 14:18
以下是引用无理取闹在2007-1-23 14:15:00的发言:

(我可不是这个版的斑竹

我晕,你上面写着版主。。。又没说是哪的 偶那知道。。随便了  你以前是韩峰吧 呵呵

#12
千里冰封2007-01-23 14:21
程序代码:

register.jsp代码:
<%@ page language="java" import="com.simon.db.*,java.sql.*,java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
String name = request.getParameter("name");
String ID = request.getParameter("password");
String checkID = request.getParameter("checkpassword");
String sex = request.getParameter("sex");
String mobelphone = request.getParameter("mobelphone");
String qq = request.getParameter("QICQ");
String Email = request.getParameter("E-mail");
String province = request.getParameter("province");
String city = request.getParameter("city");

String SQLCommand = "insert into Student_info values('"
+ ID + "', " + 1 + ", '" + province + "', '" + city + "', "
+ null + "', '" + mobelphone + "', '" + qq + "', '" + Email +"');";
%>
<%
Connection con = DBConnect.getConnection();
Statement stmt = con.createStatement();
stmt.execute(SQLCommand);
con.close();
response.sendRedirect("register/registersuccess.jsp");
%>

就在上面,你能保证你填满了所有的输入域吗?

只有一个不填 ,那你直接使用,就会出空指针异常

#13
千里冰封2007-01-23 14:21
你得到了这些参数以后,应该先判断一下是不是为null

如果不是,再把它们加入到SQLCommand里去
#14
无理取闹2007-01-23 14:23
public static Connection getConnection() {
ResourceBundle rb = ResourceBundle.getBundle("db");

try {
String driverName = rb.getString("db.driver");
Driver dirver = (Driver)Class.forName(driverName).newInstance();
String url = rb.getString("db.url");
Connection con = DriverManager.getConnection(url);
return con;

} catch(ClassNotFoundException cnfExc) {
System.out.println(cnfExc.getMessage());
cnfExc.printStackTrace();

} catch(SQLException sqlExc) {
System.out.println(sqlExc.getMessage());
sqlExc.printStackTrace();

} catch(IllegalAccessException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch(Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return null;
}
最后怎么返回null
#15
しΟν∈→鱈2007-01-23 14:26
以下是引用千里冰封在2007-1-23 14:21:00的发言:
你得到了这些参数以后,应该先判断一下是不是为null

如果不是,再把它们加入到SQLCommand里去

这里有可能是NULL的  但是我的数据库设计这些字段是可以放入空值的啊!!!

#16
无理取闹2007-01-23 14:28
看我的回复了么
#17
しΟν∈→鱈2007-01-23 14:28
以下是引用无理取闹在2007-1-23 14:23:00的发言:
public static Connection getConnection() {
ResourceBundle rb = ResourceBundle.getBundle("db");

try {
String driverName = rb.getString("db.driver");
Driver dirver = (Driver)Class.forName(driverName).newInstance();
String url = rb.getString("db.url");
Connection con = DriverManager.getConnection(url);
return con;

} catch(ClassNotFoundException cnfExc) {
System.out.println(cnfExc.getMessage());
cnfExc.printStackTrace();

} catch(SQLException sqlExc) {
System.out.println(sqlExc.getMessage());
sqlExc.printStackTrace();

} catch(IllegalAccessException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch(Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return null;
}
最后怎么返回null

因为最后不加一句这个的话  他报错啊。。然后我就参考别人写的代码  加了这么一句。。。
具体什么意思  说实话我还真不知道。。。。可能我想人家写的时候就是不会抛出异常。。
这一句只是为了让这个方法不报错而已  不会就是这的问题吧。。。

#18
千里冰封2007-01-23 14:31
很简单,在你的return null,前面加上一句System.out.println("asdfsdf");
,看看有没有输出,如果有输出,那么你就把null给返回了
#19
しΟν∈→鱈2007-01-23 14:32
好的  我试试 
#20
无理取闹2007-01-23 14:32

千里你说会不会return null呢

#21
しΟν∈→鱈2007-01-23 14:33
我的驱动写错了   果然那里出异常了  

再问个问题:
JSP连数据库时是:
Driver dirver = (Driver)Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”)newInstance();
Connection con = DriverManager.getConnection(“jdbc:microsoft:sqlserver://localhost:2433;DatabaseName=Student_info”);  

我以前写J2SE代码的时候是:
Class.forName(“jdbc.odbc.jdbcodbcDrivers”);
Connection con = DriverManager.getConnection("JDBC:ODBC:数据库名");

是有这种区别  还是一个是“老版本”?

[此贴子已经被作者于2007-1-23 14:36:28编辑过]

#22
无理取闹2007-01-23 14:35
哪里出错了
#23
千里冰封2007-01-23 14:36

应该是getConnection出错了

#24
しΟν∈→鱈2007-01-23 14:39
以下是引用しΟν∈→鱈在2007-1-23 14:33:00的发言: 

我以前写J2SE代码的时候是:
Class.forName(“jdbc.odbc.jdbcodbcDrivers”);
Connection con = DriverManager.getConnection("JDBC:ODBC:数据库名");

是有这种区别  还是一个是“老版本”?

这里写的后面驱动没大小写  呵呵   

#25
しΟν∈→鱈2007-01-23 14:47

再问题一下! 连接数据库   不一定要  USER 和PASSWORD的吧
getConnection()有一个只接受一个URL的方法的吧

#26
千里冰封2007-01-23 14:55
是的,如果你没有配置用户名和密码,可以不用

你那驱动不对吧
应该sun.jdbc.odbc.JdbcOdbcDriver吧
#27
しΟν∈→鱈2007-01-23 14:59
以下是引用千里冰封在2007-1-23 14:55:00的发言:
是的,如果你没有配置用户名和密码,可以不用

你那驱动不对吧
应该sun.jdbc.odbc.JdbcOdbcDriver吧

呵呵 后面不是有声时帖子说我打错了嘛  呵呵

1