javabean调用数据源问题?

xuwei214 2010-11-12 11:54:39
代码如下:
jsp文件:
<%@ page contentType="text/html;charset=GBK" %>
<%@ page language="java" %>
<html>
<head>
<title>the javabeanSource test</title>
</head>
<body>
<center>
<jsp:useBean id="bean2" scope="page" class="mybean.NewsListSource" />
<jsp:setProperty name="bean2" property="tableName" value="news" />
<jsp:getProperty name="bean2" property="buffer"/>
</center>
</body>
</html>
JAVA文件:
package mybean;
/*
* 显示新闻标题列表只显示前10条.
* 使用数据源连接.
*/
import java.sql.*;
import mybean.DBConnSource;

public class NewsListSource {

private String tableName="";
private Statement stmt;
private StringBuffer buffer;

public NewsListSource(){
try{
DBConnSource dbc=new DBConnSource("jdbc/myweb");
Statement stmt = dbc.getStmt();
}catch(Exception e){
System.out.print("不能连接到数据源");
}
}

public void setTableName(String n){
this.tableName=n;
}
public StringBuffer getBuffer(){
try{
StringBuffer buffer=new StringBuffer();
String strsql="SELECT * FROM "+tableName+" ORDER BY id LIMIT 10";
ResultSet rs = stmt.executeQuery(strsql);

buffer.append("<table border=3>");
buffer.append("<TR><TD>序号</TD><TD>标题</TD><TD>分类</TD><TD>来源</TD><TD>发布时间</TD></TR>");
rs.afterLast();
while(rs.previous()){
String title=rs.getString("title");
String style=rs.getString("style");
String pfrom=rs.getString("pfrom");
String posttime=rs.getString("posttime");
buffer.append("<TR><TD>"+rs.getInt(1)+"</TD><TD>"+title+"</TD><TD>"+style+"</TD><TD>"+pfrom+"</TD><TD>"+posttime+"</TD></TR>");
}
buffer.append("</table>");
rs.close();

}
catch(SQLException e){
System.out.print(e.toString());
}
return buffer;
}
}

再附上我的数据源JAVA封装:
package mybean;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public class DBConnSource {
private Connection conn;
private Statement stmt;
private PreparedStatement pstmt;
public DBConnSource(String dsName){
try{
Context initCtx = new InitialContext();
Context ctx =(Context)initCtx.lookup("java:comp/env");
DataSource ds =(DataSource)ctx.lookup(dsName);
conn = ds.getConnection();
}
catch(Exception e)
{
System.out.print(e.toString());
}
}
public synchronized Statement getStmt()throws Exception
{
stmt=conn.createStatement();
return stmt;
}
public synchronized PreparedStatement getPstmt(String sql)throws Exception
{
pstmt=conn.prepareStatement(sql);
return pstmt;
}
}
错误提示:
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:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NullPointerException
mybean.NewsListSource.getBuffer(NewsListSource.java:31)
org.apache.jsp.newslistsource_jsp._jspService(newslistsource_jsp.java:63)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


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

好象是空指针错误.是不是?帮忙看看问题出在哪儿?谢谢了.
...全文
114 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdarren 2010-11-15
  • 打赏
  • 举报
回复
你的数据库uri、用户名和密码是在哪里配置的 你知道不?知道的话 你就查看那个.xml文件。那个就是你的jndi
xuwei214 2010-11-14
  • 打赏
  • 举报
回复
问题还是没有解决.
ResultSet rs = stmt.executeQuery(sql)
这一句怎么会有错呢?
yaganblw 2010-11-14
  • 打赏
  • 举报
回复
换种连接方式
wdarren 2010-11-13
  • 打赏
  • 举报
回复
看它是否能得到这个数据源,错误肯定是没取到数据,如果sql查询没问题,那就是你的jndi配置有问题,根本就没得到这个数据库的连接池
wdarren 2010-11-13
  • 打赏
  • 举报
回复
那就检查你的jndi 看配置是否有问题?也就是下面的代码
Context initCtx = new InitialContext();
Context ctx =(Context)initCtx.lookup("java:comp/env");
DataSource ds =(DataSource)ctx.lookup(dsName);
conn = ds.getConnection();
仔细查看java:comp/env这个配置
Spring89 2010-11-13
  • 打赏
  • 举报
回复
是什么地方出异常嘛,标示出来,这样怎么看呀!
tubage408 2010-11-13
  • 打赏
  • 举报
回复
你用的是tomcat吧,要是的话,tomcat不同版本配置数据源的方式是不一样的, 你最好查下
andyniuandyniu 2010-11-13
  • 打赏
  • 举报
回复
buzhidao
xuwei214 2010-11-13
  • 打赏
  • 举报
回复
回复4楼的和7楼的.第31行是"ResultSet rs = stmt.executeQuery(sql);"
我的SQL代码在数据库里直接执行是正确的.我把这个SQL用到一个JSP页面中直接执行,也可以正常显示.
而且这一段"String strsql="SELECT * FROM "+TableName+" ORDER BY id LIMIT 10";我用在另一个JAVABEAN中也正确.
不知道怎么回事?
marqio 2010-11-13
  • 打赏
  • 举报
回复
java.lang.NullPointerException
mybean.NewsListSource.getBuffer(NewsListSource.java:31)
应该是String strsql="SELECT * FROM "+tableName+" ORDER BY id LIMIT 10";
有可能根本查出来就没数据
不知道31行是哪句代码,自己检查下,如果是就修改sql的写法
wdarren 2010-11-13
  • 打赏
  • 举报
回复
http://bbs.chinaunix.net/thread-1276235-1-1.html 参考下这个哥们的 貌似是数据库设计的一个bug
wdarren 2010-11-13
  • 打赏
  • 举报
回复
如果你使用的数据库是oracle的话,order by 和 limit 是不能这样用的;详细语法去查下google
wdarren 2010-11-13
  • 打赏
  • 举报
回复
你先把这条SQL查询 SELECT * FROM "+tableName+" ORDER BY id LIMIT 10 直接在数据库里面执行一把,肯定会报语法错误的,所以就查不到记录,就报个空指针,就这么简单
xuwei214 2010-11-13
  • 打赏
  • 举报
回复
应该不是版本的问题.因为在这个项目里我其他的数据源调用都正常.

81,114

社区成员

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

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