JSP中很奇怪的一个查库错误,请帮忙!(非常之急)

peppi 2003-01-06 06:39:21
我在JSP中有一段:
<%
String s = null;
String sql = "select * from league where (Leagueid = 0)";

ResultSet rs = db.getResultSet(sql); //引用Bean内一个查询方法,此句报错
out.println("rs: " + rs);
%>

页面报错:
java.lang.NullPointerException
at com.microsoft.jdbc.base.BaseImplStaticCursorResultSet.setupTempFiles(Unknown Source)
at com.microsoft.jdbc.base.BaseImplStaticCursorResultSet.(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.chainInServiceImplResultSets(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.getNextResultSet(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonGetNextResultSet(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQuery(Unknown Source)
at gatcherdata.DatabaseBean.executeQuery(DatabaseBean.java:66)
at gatcherdata.DatabaseBean.getResultSet(DatabaseBean.java:141)


根据我的一路追踪,最后发现问题在这:
try
{
System.out.println("ccccccccccccccccc");
stmt = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
java.sql.ResultSet.CONCUR_READ_ONLY);
System.out.println("ddddddddddddddddd");
System.out.println("sql: " + sql); //这以上都正常输出,下面那句就不
//输出,但不抛异常.最奇怪的是,我
//利用这个输出的sql在JB中测试,在
//SQL Server 2000中测试,都能正确
//数据结果,就JSP中不行

rs = stmt.executeQuery(sql); //到此执行停止,但不抛异常
System.out.println("rs: " + rs);
}
catch (SQLException e)
{
System.out.println("Error in DatabaeBean.execuQuery(): 查询数据发生错误: " + e.getMessage());
throw new SQLException();
}

另:我在JSP内用try输出e.getMessage(),它输出的是"null",各位,这错怎么出现的?
...全文
28 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger2008 2003-01-07
  • 打赏
  • 举报
回复
答案很明显,你用的JDBC不是同一版本的,JBuilder中的JDBC实现了
con.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
而tomcat中的JDBC则没有实现,建议更换JDBC.
nbm0 2003-01-07
  • 打赏
  • 举报
回复
up
peppi 2003-01-06
  • 打赏
  • 举报
回复
Alfert(Alfert):
问题不在这,因为我测试时用的是输出System.out.println("eeeeeee");
然后才rs.next()的,但没输出eeeeeeeeee

我现在发现,我的程序只在servlet中有这个问题,我特意做了个测试,同样的语句,都是一个查询,在servlet中就查不出结果,但只要
stmt = con.createStatement();
就能查出来,在其它类里就正常,没有任何错.
是什么原因?

Alfert 2003-01-06
  • 打赏
  • 举报
回复
这是因为你没有判断rs是否为空造成的,在ResultSet rs = db.getResultSet(sql); 下面加这句话应该就行了
if(rs.next())
out.println("rs: " + rs);

peacock_king 2003-01-06
  • 打赏
  • 举报
回复
少用null,它会产生奇怪的错误,其异常提示却只得一句,要么是一大堆,总之是让人看不懂。而且在抛出nullpointerexception之后,相关语句就不会执行了,也不会有应有的异常报告。

在google里搜索“NullPointerException”,即可找到这方面的讲解。
xiaofenguser 2003-01-06
  • 打赏
  • 举报
回复
或许是JDBC的原因吧,或许是两个用的不是同一个JDBC.
Firstbyte 2003-01-06
  • 打赏
  • 举报
回复
帮你up
peppi 2003-01-06
  • 打赏
  • 举报
回复
如果我:
stmt = con.createStatement();
能正常显示!!!!!
奇怪了,为什么我的LSP不支持
stmt = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
????????
而在JB中就没有问题,是不是我什么设置不对?????我以前写JSP没遇到过这个问题呀!
xiaofenguser 2003-01-06
  • 打赏
  • 举报
回复
这个我不大清楚,只是提示你一下.看到里面有个下面的出错提示.
Unknown Source
我没遇到这种情况,我一般直接用stmt = con.createStatement();
peppi 2003-01-06
  • 打赏
  • 举报
回复
xiaofenguser(风雨):
怎么说???如果说不支持,那我在JB中就不应该能查处结果来,是不是要在tomcat中设置什么?我在tomcat/lib下已经放了微软的三个驱动文件了,还有什么要做的吗???
peppi 2003-01-06
  • 打赏
  • 举报
回复
stmt:com.microsoft.jdbc.base.BaseStatment@4eb@43
sql:select * from league where (Leagueid = 0)

但再往下,就没输出,rs.next()根本就没执行到这就停了,在控制台没抛任何异常,而且奇怪的是,我在JB中利用同样的代码,就能查出结果来,我怀疑是不是我tomcat的配置不正确?但我没觉得查数据库要做什么特殊设置呀?
xiaofenguser 2003-01-06
  • 打赏
  • 举报
回复
还有可能是数据库不支持stmt = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.CONCUR_READ_ONLY);这个
tripofdream 2003-01-06
  • 打赏
  • 举报
回复
是不是stmt==null?我觉得不是没有抛出异常,因为你只捕捉了SQLException
highreport 2003-01-06
  • 打赏
  • 举报
回复
rs.next();
xiaofenguser 2003-01-06
  • 打赏
  • 举报
回复
sql是不是null?
stmt是不是null?
rs是不是null?
一步一步查吧.
flyylf 2003-01-06
  • 打赏
  • 举报
回复
I don't know
flyylf 2003-01-06
  • 打赏
  • 举报
回复
sorry
peppi 2003-01-06
  • 打赏
  • 举报
回复
这就是我的bean的主要出问题的代码:
输出了:
ccccccccccc
ddddddddddd
和sql,但往下就没输出
try
{
System.out.println("ccccccccccccccccc");
stmt = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
java.sql.ResultSet.CONCUR_READ_ONLY);
System.out.println("ddddddddddddddddd");
System.out.println("sql: " + sql); //这以上都正常输出,下面那句就不
//输出,但不抛异常.最奇怪的是,我
//利用这个输出的sql在JB中测试,在
//SQL Server 2000中测试,都能正确
//数据结果,就JSP中不行

rs = stmt.executeQuery(sql); //到此执行停止,但不抛异常
System.out.println("rs: " + rs);
}
catch (SQLException e)
{
System.out.println("Error in DatabaeBean.execuQuery(): 查询数据发生错误: " + e.getMessage());
throw new SQLException();
}
Mai_520 2003-01-06
  • 打赏
  • 举报
回复
把bean的代码贴出来看看
peppi 2003-01-06
  • 打赏
  • 举报
回复
我用的是tomcat4.0.6,使用微软的sql server 2000JDBC驱动,我已经把它们三个文件放到tomcat/lib下了,我实在想不出来还有什么原因了.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧