tomcat5.0+MS Access数据库连接问题连接问题。。解决问题就结贴。谢谢

renmao 2005-07-18 10:48:00
tomcat5.0通过JDBC-ODBC bridge和MS Access数据库连接问题。首先建立一个Access数据库faq.mdb,其中的表faqs有字段id(自动增量型,并设为主关键字)、subject(文字型,长度200)、answers(备注型)。这个表中可以存放一些编程知识的常见问题及答案,
然后,在Control Panel(控制面板)的ODBC Datasource模块中加入System DSN,取名faq,并指向faq.mdb。 创建一个JavaBean,名为faq.java,并保存在jswdk-1.0.1webpagesWEB-INFjspeans est目录下。faq.java 的内容如下:
package test;
import java.sql.*;
public class faq {
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:faq";
Connection conn = null;
ResultSet rs = null;
public faq() {
try {
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e) {
System.err.println("faq(): " + e.getMessage());
}
}
public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = DriverManager.getConnection(sConnStr);
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
return rs;
}
}
编译faq.java以后生成faq.class,在jswdk-1.0.1webpages est目录下创建JSP文件faq.jsp,其内容如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>我的FAQ !</title>
</head>
<body>
<p><b>这是我的FAQ!</b></p>
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="workM" scope="page" class="test.faq" />
<%
ResultSet RS = workM.executeQuery("SELECT * FROM faqs");
String tt;
while (RS.next()) {
tt = RS.getString("Answer");
out.print("<LI>" + RS.getString("Subject") + "</LI>");
out.print("<pre>" + tt + "</pre>");
}
RS.close();
%>
在浏览器的地址栏中键入http://localhost:8080/test/faq.jsp,faq.jsp调用JavaBean,从数据库中读出内容并输出.
结果提示如下,不知道什么原因:谢谢
HTTP Status 500 -

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

type Exception report

message

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

exception

javax.servlet.ServletException: Column not found
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:673)
org.apache.jsp.faq_jsp._jspService(faq_jsp.java:84)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


root cause

java.sql.SQLException: Column not found
sun.jdbc.odbc.JdbcOdbcResultSet.findColumn(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
org.apache.jsp.faq_jsp._jspService(faq_jsp.java:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


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


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

...全文
185 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
netAntNT 2005-07-26
  • 打赏
  • 举报
回复
应该是
if (tt != null && !tt.equals(""))

//具体采用什么样的编码方式跟系统\jdk\服务器都有关系
大体上是iso-8859-1,gbk,utf-8,gb2312
最好采用配置文件的方式来比较方便
renmao 2005-07-18
  • 打赏
  • 举报
回复
有没有解决中文不能正常显示,如上面的情况的。解决方式。。谢谢
renmao 2005-07-18
  • 打赏
  • 举报
回复
是呀。我想也是的。。。很简单的中文都显示不出来,晕倒。。我看到了。。结果是可以显示了。。就是中文不能正常现实。晕倒,谢谢二位。
peanz 2005-07-18
  • 打赏
  • 举报
回复
也许是中文乱码问题,去查查资料吧。
renmao 2005-07-18
  • 打赏
  • 举报
回复
晕倒。。我试过了,好像中文显示不出来,晕倒,有什么解决办法么
renmao 2005-07-18
  • 打赏
  • 举报
回复
to shenhai800(深海)
我:表faqs里面有一条数据。也就是SELECT * FROM faqs,可以出来如下结果:
id subject answers
1 subject(文字型,长度200) answers(备注型)
renmao 2005-07-18
  • 打赏
  • 举报
回复
to peanz(似水流年).怎么出来结果是:
这是我的FAQ!

subject???????200?
answers?????
不对吧。应该出来数据的。。
我里面有一个数据:
id:1
subject:subject(文字型,长度200)
answers:answers(备注型)
哈哈。谢谢peanz(似水流年).
shenhai800 2005-07-18
  • 打赏
  • 举报
回复
提示很明显:“Column not found”,把 tt = RS.getString("Answer") 改为 tt = RS.getString("Answers") 应该就可以了.try 一下吧!
renmao 2005-07-18
  • 打赏
  • 举报
回复
我修改后看看。。我没有注意到这个。。谢谢兄弟,确认后。立刻结贴
peanz 2005-07-18
  • 打赏
  • 举报
回复
是不是RS.getString("Answer"); ---->RS.getString("answers");
renmao 2005-07-18
  • 打赏
  • 举报
回复
不会吧。。没有人回复。晕倒。。自己顶一下
renmao 2005-07-18
  • 打赏
  • 举报
回复
不知道他们为何提示:
javax.servlet.ServletException: Column not found。。。。。,其他设置,感觉没有错误的
wangxingok 2005-07-18
  • 打赏
  • 举报
回复
if(tt != null) 应该是这样才不会有例外吧
hoho1979 2005-07-18
  • 打赏
  • 举报
回复


先对RS.getString("Answer").值先来个判空操作然后再作字符转换,否则有例外

tt = RS.getString("Answer");
if(!tt.equals("")){
tt = new String(tt.getBytes("ISO-8859-1"),"gb2312");
}else{
tt = "not value";
}
shenhai800 2005-07-18
  • 打赏
  • 举报
回复
先看System.out.println(RS.getString("Answers"))是不是乱码,如果正常就按上面说得转换一下。

如果已经是乱码则是数据库须转换一下,那么试试这个方法(桥连接的方法没试过):
String sConnStr = "jdbc:odbc:faq?useUnicode=true&characterEncoding=gb312";
shenhai800 2005-07-18
  • 打赏
  • 举报
回复
做一下转换就行了:
tt = new String(RS.getString("Answer").getBytes("ISO-8859-1"),"gb2312")
renmao 2005-07-18
  • 打赏
  • 举报
回复
哈哈。没有人回复了

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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