Jsp+Bean+Access连接数据库问题

development 2004-09-21 01:49:09
操作系统:winxp
数据库Access2000,库名:student,表名table1,(其中字段为name(char),sex(char),score(num))
Apache Tomcat Ver: 5.0.28
已在控制面板里把ODBC源配置好.
1,conn.java(bean模块,连接数据库用)
2,conn_db.jsp(显示模块,显示table1里的数据)
问题:不能显示正确内容.

其源代码如下:
1,文件名:conn.java

package student;
import java.sql.*;
import java.io.*;
public class conn {
private String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
private String sConnStr = "jdbc:odbc:student";
private Connection connect = null;
private ResultSet rs = null;
private Statement stmt = null;
public conn() {
try {
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e) {
System.err.println( e.getMessage());
}
}
public ResultSet executeQuery(String sql) {
try {
connect = DriverManager.getConnection(sConnStr);
stmt = connect.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println(ex.getMessage());
}
return rs;
}
}
//已把该java程序用命令javac conn.java -d . 生成一个conn.class文件,并在student文件夹里.
//并且把该student文件夹与其class文件放到WEB-INF\classes里.

2,文件名:conn_db.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="connDbBean" scope="page" class="student.conn"/>
<html>
<head>
<title>test db connection</title>
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<table width="60%" border="1">
<tr bgcolor="#CCCCFF">
<td width="50%">
<div align="center"><font color="#FF0033"><b>姓名</b></font></div>
</td>
<td width="25%">
<div align="center"><font color="#FF0033"><b>性别</b></font></div>
</td>
<td width="25%">
<div align="center"><font color="#FF0033"><b>分数</b></font></div>
</td>
</tr>
<%
ResultSet RS_result = connDbBean.executeQuery("select * from table1");
String studentName="";
String studentSex="";
int studentScore=0;
while(RS_result.next())
{
studentName = RS_result.getString("name");
studentSex = RS_result.getString("sex");
studentScore = RS_result.getInt("score");
%>
<tr>
<td width="50%" bgcolor="#FFFFFF">
<div align="center"><%=studentName%></div>
</td>
<td width="25%">
<div align="center"><%=studentSex%></div>
</td>
<td width="25%">
<div align="center"><%=studentScore%></div>
</td>
</tr>
<%
}
RS_result.close();
%>
</table>
</body>
</html>

/////////////////////////////////////////////////////////////////////////////////////
执行conn_db.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
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._08.conn_005fdb_jsp._jspService(conn_005fdb_jsp.java:77)
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.
--------------------------------------------------------------------------------
Apache Tomcat/5.0.28
/////////////////////////////////////////////////////////
请教各位兄弟,解决办法!谢谢!
...全文
454 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
progra 2004-10-31
  • 打赏
  • 举报
回复
十分关注
jenry_leon 2004-10-21
  • 打赏
  • 举报
回复
up,学习中!
mychao2002 2004-10-21
  • 打赏
  • 举报
回复
是书上的,我也用这个例子,也遇到这个问题了,好多天还没有解决呢,郁闷
kandyd 2004-09-30
  • 打赏
  • 举报
回复
忘了一句话:你可以将executeQuery中的private去掉的,我忘去掉了,是用你原贴剪切粘贴上去的。
kandyd 2004-09-30
  • 打赏
  • 举报
回复
呵呵,烦了我一夜的问题终于解决了,楼主用下面程序试试。
感谢CSDN里的朋友提供的灵感。
如果你用的是ACCESS数据库,也可以将sConnStr改为:
String sConnStr = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=x:\\folder\\name.mdb";
这样可以不用在控制面板设置数据源。

package student;
import java.sql.*;
import java.io.*;
public class conn {
private String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
private String sConnStr = "jdbc:odbc:student";
private Connection connect = null;
public conn() {
try {
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e) {
System.err.println( e.getMessage());
}
}
public ResultSet executeQuery(String sql) {
private ResultSet rs = null;
private Statement stmt = null;
try {
connect = DriverManager.getConnection(sConnStr);
stmt = connect.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println(ex.getMessage());
}
return rs;
}
}
kandyd 2004-09-30
  • 打赏
  • 举报
回复
晕哦,我也刚好遇到这个问题,来看看有没有解决之道,楼主你的问题解决了吗?
怎么会这样呀?555555555555555555555
我还试过MS SQL2000也不行,下了M$的JDBC也是一样的错误,该不会是tomcat的问题吧?
shaopin 2004-09-22
  • 打赏
  • 举报
回复
可以确定是ODBC数据源的问题,可能数据源没设置好,可能ODBC驱动程序坏了
zzf_xinqing 2004-09-22
  • 打赏
  • 举报
回复
你把public ResultSet executeQuery(String sql) {}
改成public static ResultSet executeQuery(String sql) {}
再试看看
development 2004-09-22
  • 打赏
  • 举报
回复
Up.很有可能是ODBC有问题.
development 2004-09-22
  • 打赏
  • 举报
回复
留个MSN或QQ给我好吗?谢谢大家.
我的MSN:jackyganchina@hotmail.com
QQ:26317161
development 2004-09-22
  • 打赏
  • 举报
回复
什么方法都试过了,看来不是代码的问题.它就是连不数据库.
development 2004-09-22
  • 打赏
  • 举报
回复
Up...
cucuchen 2004-09-22
  • 打赏
  • 举报
回复
第一贴没有关闭连接,第二贴已经更正。
cucuchen 2004-09-22
  • 打赏
  • 举报
回复
package com.cucu.db;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
* 取得ODBC数据库连接(一般用于ACCESS数据库)
* @author http://www.linewell.com <a href=mailto:cg@linewell.com>cg@linewell.com</a>
* @version 1.0
*/
public class OdbcConnection {
Connection conn = null; //数据库连接对象

Statement stmt = null;

PreparedStatement pstmt = null;

/**
* 构造器,初始化数据库连接
*
*/
public OdbcConnection() {

/*-------注意:name为数据源名:在此我设置为系统DNS,
* ------数据源驱动程序有两种:第一种为MicroSoft Access Driver;
* ------第二种为Driver do MicroSoft Access.经我测试均能正常使用
*/
String url = "jdbc:odbc:name";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
System.err.println(e.toString());
}

try {
conn = DriverManager.getConnection(url, "", "");

} catch (SQLException e) {
System.err.println(e.toString());
}
}

/**
* 根据一个SELECT语句返回一个结果集对象
* @param sql String-select查询语句
* @return ResultSet结果集对象
*/
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
try {

stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return rs;
}

/**
* 关闭连接。
* <p>
* <b>使用完毕后请显式调用 </b>
*
*/
public void close() {
try {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}

catch (SQLException e) {
System.err.println(e.getMessage());
}

}

//----------test code:(此代码经过严格测试完全通过)------------
public static void main(String args[]) {
OdbcConnection oc = new OdbcConnection();
ResultSet rs = oc.executeQuery("SELECT * FROM name");
try {
while (rs != null && rs.next()) {
System.out.println("the name is:" + rs.getString(1));
System.out.println("the age is:" + rs.getString(2));
}
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
rs.close();//关闭rs结果集
rs = null;
oc.close(); //关闭连接
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}

}

}
cucuchen 2004-09-22
  • 打赏
  • 举报
回复
package com.cucu.db;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;

/**
* 取得ODBC数据库连接(一般用于ACCESS数据库)
* @author http://www.linewell.com <a href=mailto:cg@linewell.com>cg@linewell.com</a>
* @version 1.0
*/
public class OdbcConnection {
Connection conn = null; //数据库连接对象

/**
* 构造器,初始化数据库连接
*
*/
public OdbcConnection() {

/*-------注意:name为数据源名:在此我设置为系统DNS,
* ------数据源驱动程序有两种:第一种为MicroSoft Access Driver;
* ------第二种为Driver do MicroSoft Access.经我测试均能正常使用
*/
String url = "jdbc:odbc:name";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
System.err.println(e.toString());
}

try {
conn = DriverManager.getConnection(url, "", "");

} catch (SQLException e) {
System.err.println(e.toString());
}
}
/**
* 根据一个SELECT语句返回一个结果集对象
* @param sql String-select查询语句
* @return ResultSet结果集对象
*/
public ResultSet executeQuery(String sql) {
Statement stmt = null;
ResultSet rs = null;
try {

stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException e) {
System.err.println(e.getMessage());
}
return rs;
}

//----------test code:(此代码经过严格测试完全通过)------------
public static void main(String args[]){
OdbcConnection oc = new OdbcConnection();
ResultSet rs = oc.executeQuery("SELECT * FROM name");
try {
while(rs!=null&&rs.next()){
System.out.println("the name is:"+rs.getString(1));
System.out.println("the age is:"+rs.getString(2));
}
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}

}
development 2004-09-22
  • 打赏
  • 举报
回复
总结一点:
Bean访问Access的.mdb文件失败
如何解决?
zhonghua2003 2004-09-22
  • 打赏
  • 举报
回复
为了文静,好好读书,天天向上!!
development 2004-09-22
  • 打赏
  • 举报
回复
请各位兄弟帮忙,几天了,我都还没有头绪.
shaopin 2004-09-22
  • 打赏
  • 举报
回复
那现在的错误信息是不是还是原来那个,如果是,请按以下方法:
1、找到tomcat\work\Standalone\localhost\[应用虚拟目录]\下的conn_005fdb_jsp.java文件
2、找到此文件第77行,看是对应conn_db.jsp中的哪行,我怀疑是RS_result.close();这行出错
那么你将语句改为if(RS_result!=null)RS_result.close();如果到这里没有错误了,那么说明你的结果集还是空的

如果是另外的出错信息,请讲明
jackygan 2004-09-22
  • 打赏
  • 举报
回复
谢谢各位,好像我的代码到别人那里是可以运行的,所以我觉得应该是环境的问题.
不知道是不是tomcat 5.0.28有问题?
其实我要想知道个究竟,错在那里?问题在那里?
加载更多回复(17)

81,122

社区成员

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

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