注册 登录
编程论坛 J2EE论坛

[求助] 帮忙看看这个错误大概是什么意思??

梧桐 发布于 2007-03-18 22:52, 1833 次点击


偶是新手,刚看了点JSP的书
在测试数据库的时候出了这么一个错误信息,我实在看不懂错误是什么意思!!

有经验的朋友帮忙看看!!

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: Exception in JSP: /dbprogram.jsp:52

49: out.println("恭喜,表连接创建成功!");
50: %>
51:
52: <%
53: ResultSet RS= Stmt.executeQuery("SELECT * FROM EMPLOYEE WHERE eage<25"); /*连接到数据库中的表EMPLOYEE上*/
54: String tt; /**号表示选择表中所有的列*/
55: String link; /*若选择其中的某几列可以将*号换成列标号*/


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:467)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

java.lang.NullPointerException
org.apache.jsp.dbprogram_jsp._jspService(dbprogram_jsp.java:104)
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:328)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.23 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.23

24 回复
#2
angeloc2007-03-19 00:13
没代码,看不懂!
#3
风月_无边2007-03-19 08:16

好像是有空指针异常,看看连接有没有问题!!

#4
angeloc2007-03-19 08:56
不是好象,就是!!!不过没代码哪能找到错误!
#5
梧桐2007-03-19 09:36

谢谢各位!!
我没发现有空指针异常在程序哪个地方??
帮忙看一下
下面是代码:

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page info="database handler"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<!--导入结束-->
<html>
<head>
<title>数据库连接实验</title>
</head>
<body>
<%
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:try";//“try”的意思就是与刚才设置的数据源名对应;
Connection Con = null;
Statement Stmt = null;
try
{
try /*加载驱动程序*/
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
out.print("Connect to Database error: " + e.getMessage());
}
try /*建立连接*/
{
Con = DriverManager.getConnection(sConnStr,"sa","");
}
catch(SQLException e)
{
out.print(e.toString());
}

Stmt = Con.createStatement(); /*创建JDBC声明*/
String query="CREATE TABLE GUEST" + /*在数据库中创建新的表*/
"(NUM VARCHAR(32),"+
"USERNAME TEXT,"+
"CONTENT TEXT,"+
"PASSWORD INTEGER,"+
"TOTAL INTEGER,"+
"REALNAME TEXT)";
Stmt.executeUpdate(query); /*更新数据库*/
}
catch (Exception e) {}
out.println("恭喜,表连接创建成功!");
%>

<%
ResultSet RS= Stmt.executeQuery("SELECT * FROM EMPLOYEE WHERE eage<25"); /*连接到数据库中的表EMPLOYEE上*/
String tt; /**号表示选择表中所有的列*/
String link; /*若选择其中的某几列可以将*号换成列标号*/
String makeStr; /*WHERE语句表示条件选择*/
out.print("<table border=2 style=color:blue >");
while (RS.next()) {
out.print("<tr><td>");
tt = RS.getString("ename"); /*查询表中NUM字段的内容,字段内容可能使数组,默认列输出*/
out.print(tt);
out.print("</td><td>");
tt = RS.getString("esex");
out.print(tt);
out.print("</td><td>");
tt = RS.getString("eage");
out.print(tt);
out.print("</td><td>");
tt=RS.getString("egrade");
out.print(tt);
out.print("</td><td>");
}
out.print("</table>");
RS.close();
out.println("数据查询成功!");
%>

<% /*在数据库中添加数据*/
String sql="INSERT INTO EMPLOYEE VALUES ('5','aaa','m',54,'hehe')";
Stmt.executeUpdate(sql);
out.println("添加数据成功!");
%>
</body>
</html>

#6
千里冰封2007-03-19 09:38
Exception in JSP: /dbprogram.jsp:52

这个代码的第52行

你自己看看是什么
#7
梧桐2007-03-19 09:55

 代码52行是红色的部分,我还是没看懂是什么问题

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page info="database handler"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<!--导入结束-->
<html>
<head>
<title>数据库连接实验</title>
</head>
<body>
<%
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:try";//“try”的意思就是与刚才设置的数据源名对应;
Connection Con = null;
Statement Stmt = null;
try
{
try /*加载驱动程序*/
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
out.print("Connect to Database error: " + e.getMessage());
}
try /*建立连接*/
{
Con = DriverManager.getConnection(sConnStr,"sa","");
}
catch(SQLException e)
{
out.print(e.toString());
}

Stmt = Con.createStatement(); /*创建JDBC声明*/
String query="CREATE TABLE GUEST" + /*在数据库中创建新的表*/
"(NUM VARCHAR(32),"+
"USERNAME TEXT,"+
"CONTENT TEXT,"+
"PASSWORD INTEGER,"+
"TOTAL INTEGER,"+
"REALNAME TEXT)";
Stmt.executeUpdate(query); /*更新数据库*/
}
catch (Exception e) {}
out.println("恭喜,表连接创建成功!");
%>

<%
ResultSet RS= Stmt.executeQuery("SELECT * FROM EMPLOYEE WHERE eage<25"); /*连接到数据库中的表EMPLOYEE上*/

String tt; /**号表示选择表中所有的列*/
String link; /*若选择其中的某几列可以将*号换成列标号*/
String makeStr; /*WHERE语句表示条件选择*/
out.print("<table border=2 style=color:blue >");
while (RS.next()) {
out.print("<tr><td>");
tt = RS.getString("ename"); /*查询表中NUM字段的内容,字段内容可能使数组,默认列输出*/
out.print(tt);
out.print("</td><td>");
tt = RS.getString("esex");
out.print(tt);
out.print("</td><td>");
tt = RS.getString("eage");
out.print(tt);
out.print("</td><td>");
tt=RS.getString("egrade");
out.print(tt);
out.print("</td><td>");
}
out.print("</table>");
RS.close();
out.println("数据查询成功!");
%>

<% /*在数据库中添加数据*/
String sql="INSERT INTO EMPLOYEE VALUES ('5','aaa','m',54,'hehe')";
Stmt.executeUpdate(sql);
out.println("添加数据成功!");
%>
</body>
</html>

#8
支离破碎2007-03-19 10:27
ResultSet RS= Stmt.executeQuery("SELECT * FROM EMPLOYEE WHERE eage<25");
先确保你的stmt对象是否已存在,否则他是个NULL值。你先看看你上面的Stmt = Con.createStatement()是否建立
#9
梧桐2007-03-19 11:09

谢谢!
真的有点烦!!
我把数据库的设置改了一下!配置数据源的时候采用的是Windows身份认证了
Con = DriverManager.getConnection(sConnStr,"sa",""); 也改为了
Con = DriverManager.getConnection(sConnStr);


改后的代码如下:

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page info="database handler"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<!--导入结束-->
<html>
<head>
<title>数据库连接实验</title>
</head>
<body>
<%
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:try";//“try”的意思就是与刚才设置的数据源名对应;
Connection Con = null;
Statement Stmt = null;
try
{
try /*加载驱动程序*/
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
out.print("Connect to Database error: " + e.getMessage());
}
try /*建立连接*/
{
Con = DriverManager.getConnection(sConnStr); /*代码修改的地方*/
}
catch(SQLException e)
{
out.print(e.toString());
}

Stmt = Con.createStatement(); /*创建JDBC声明*/
String query="CREATE TABLE GUEST" + /*在数据库中创建新的表*/
"(NUM VARCHAR(32),"+
"USERNAME TEXT,"+
"CONTENT TEXT,"+
"PASSWORD INTEGER,"+
"TOTAL INTEGER,"+
"REALNAME TEXT)";
Stmt.executeUpdate(query); /*更新数据库*/
}
catch (Exception e) {}
out.println("恭喜,表连接创建成功!");
%>

<%
ResultSet RS= Stmt.executeQuery("SELECT * FROM EMPLOYEE WHERE eage<25"); /*连接到数据库中的表EMPLOYEE上*/
String tt; /**号表示选择表中所有的列*/
String link; /*若选择其中的某几列可以将*号换成列标号*/
String makeStr; /*WHERE语句表示条件选择*/
out.print("<table border=2 style=color:blue >");
while (RS.next()) {
out.print("<tr><td>");
tt = RS.getString("ename"); /*查询表中NUM字段的内容,字段内容可能使数组,默认列输出*/
out.print(tt);
out.print("</td><td>");
tt = RS.getString("esex");
out.print(tt);
out.print("</td><td>");
tt = RS.getString("eage");
out.print(tt);
out.print("</td><td>");
tt=RS.getString("egrade");
out.print(tt);
out.print("</td><td>");
}
out.print("</table>");
RS.close();
out.println("数据查询成功!");
%>

<% /*在数据库中添加数据*/
String sql="INSERT INTO EMPLOYEE VALUES ('5','aaa','m',54,'hehe')";
Stmt.executeUpdate(sql);
out.println("添加数据成功!");
%>
</body>
</html>


现在出的错误变成这样的了:

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.handleJspException(JspServletWrapper.java:476)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

java.lang.NullPointerException
org.apache.jsp.dbprogram_jsp._jspService(dbprogram_jsp.java:104)
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:328)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.23 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.23


劳驾帮忙看看这错误又是什么意思呢???  还是空指针??
如果是空指针,那又是哪行代码了呢??

#10
千里冰封2007-03-19 13:50
还是空指针异常,其实空指针异常是最好排除的,无非就是保证你所用到的对象都不是null就可以了

你可以在你每生成一个对象的时候,用System.out.println来输出一下,看看它是不是 null的就知道在那里哪个对象被赋了null了
#11
lgdcky2007-03-19 14:05

第52行con=null;当然有空指针异常啊!

#12
angeloc2007-03-19 14:56
以下是引用lgdcky在2007-3-19 14:05:47的发言:

第52行con=null;当然有空指针异常啊!

#13
梧桐2007-03-19 17:30
以下是引用lgdcky在2007-3-19 14:05:47的发言:

第52行con=null;当然有空指针异常啊!

修改后的错误也没说空指针在52行呀?

再说con在这不赋值了吗???

try /*建立连接*/
{
Con = DriverManager.getConnection(sConnStr);
}
catch(SQLException e)
{
out.print(e.toString());
}

#14
千里冰封2007-03-19 17:36

你还是用out.println把它们都打印出来吧,看看是不是为null

#15
梧桐2007-03-19 18:27
多谢千里!!
可是这个页面代码有错,没法看到输出的结果呀!
out.println也就不起作用了!


难道这段代码有其他的方法可以调试,我不知道,可以告之吗???
#16
angeloc2007-03-20 11:01

这个东西你这么长时间还没弄出来么,实在看不下去了!

Class.forName(sDBDriver); //sDBDriver你不是NULL并且放在TRY内所以没问题
Con = DriverManager.getConnection(sConnStr);//这里你就有可能得到CON=NULL
Stmt = Con.createStatement(); //如果CON=NULL,这里你就有可能得到NULLPOINTER

并不是说你把Con = DriverManager.getConnection(sConnStr);放在TRY块内就没事了,后面的代码需要引用到CON,而且有的没放在TRY块内,当然造成NULLPOINTER了。

所以你的问题还应该是数据库连接没有成功。如果你想测试,你可以把后面代码全删掉,但做个连接输出下!

#17
梧桐2007-03-20 11:57

谢谢angeloc的指教!
#18
songyuqian2007-03-20 19:55

一步一步打出来 ,没到那步就都先删了

#19
黄袖标2007-03-22 14:12
首先一看500错误代号,99%是jsp的错误,楼主细心点查查jsp的错吧
#20
liqiang052007-03-23 09:23

.............

[此贴子已经被作者于2007-3-23 9:26:05编辑过]

#21
liqiang052007-03-23 09:25
回复:(梧桐)[求助] 帮忙看看这个错误大概是什么意思...

........

[此贴子已经被作者于2007-3-23 9:25:41编辑过]

#22
梧桐2007-03-23 11:17
以下是引用黄袖标在2007-3-22 14:12:08的发言:
首先一看500错误代号,99%是jsp的错误,楼主细心点查查jsp的错吧

是吗??这个还一真的没听过,强!!
那驱动程序出差错呢,错误代码是什么打头呢??
这几天都是一样的错误!!
没连数据库,页面都很正常显示,连数据库就总是报错~~

#23
azhs2007-03-25 21:25
你可以用system.out.println()输出看一下,是不是为空
#24
purpleshadow2007-03-25 22:13
while中的最后一个out.println错了,〈/td〉后面应该是&lt;/tr&gt;
#25
ILoveMK2007-03-25 22:47
人才啊...........
1