steam伊苏汉化补丁:请教专家:JSP连接ACCESS数据库时出错!

来源:百度文库 编辑:神马品牌网 时间:2024/05/11 05:30:04
我写的代码:
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<html>
<body>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){
out.print(e);
}
try{
String url = "jdbc:odbc:jcc";
Connection conn = DriverManager.getConnection(url,"jcc","jsp.com.cn");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user");
out.println("User-list"+"<br>");
while(rs.next()){
out.print(rs.getString(1)+" ");
out.print(rs.getString(2)+"<br>");
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception ex){
out.print(ex);
}
%>
</body>
</html>
然后存成Select.jsp文件,上面提到的jcc.mdb与Select.jsp在同一目录下,但是调试时候出错:
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
Dreamwever的帮助文档中说这种问题是由于以下原因造成的:
如果使用 Microsoft Access,则可能数据库文件 (.mdb) 已锁定。此锁定可能是因 DSN 使用不同的名称访问该数据库引起的。在 Windows 资源管理器中,从包含数据库文件 (.mdb) 的文件夹中搜索锁定文件 (.ldb) 并删除该 .ldb 文件。如果另一个 DSN 正指向同一数据库文件,则最好删除该 DSN,以防止以后出错。进行以上更改后务必要重新启动计算机。
但是我使用资源管理器时没找到.lib文件,设置显示隐藏文件后也没有.至于DSN更不知道在哪里删除.
甚至我直接把别人的正确的代码复制到我机子上都会出现不能与数据库连接的问题.
这是怎么回事啊?怎么解决啊?
请高手赐教!!!
我不想用创建数据源的方式来连接数据库.

问题出在这儿:

String url = "jdbc:odbc:jcc";
Connection conn = DriverManager.getConnection(url,"jcc","jsp.com.cn");
JDBC连接Access数据库有两种方式:
1.连接数据源,需要在操作系统中配置数据源,连接方式如下(假设jcc就是数据源名):
Connector conn=DriverManager.getConnection("jdbc:odbc:jcc");

2.连接数据库文件,也就是你的jcc.mdb,不过要一定要注意该文件的路径,
如果Access文件存放在e:\Tomcat\webapps\test下,那么jcc.mdb的相对路径就是
..\webapps\test\jcc.mdb
当然你也可以使用绝对路径,连接数据库文件应该像这样:
Connector conn=DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=..\\webapps\\test\\jcc.mdb");

这里面最关键的地方就是,应用服务器启动后,当前目录并不是你的JSP文件所在的目录,
计算绝对路径可以这样:
String path = new java.io.File(".").getAbsolutePath();
你可以把这个字符串输出看看,试试就明白了。

参考以下连接方式:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};" +
"DBQ=Mytext.mdb");
这样是连接数据文件,而不是用DSN.

下面是我写的一个servlet连接access数据库表的代码,不需要创建数据源,你可以看一下
===================================================import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;

public class ConnectAccess extends HttpServlet {
Connection conn = null;
Statement stmt = null;

public void init() throws ServletException {
String strurl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\books.mdb";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection(strurl);
stmt=conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;");
PrintWriter out = response.getWriter();
try {
ResultSet rs=stmt.executeQuery("select * from books");
out.println("<html><body>");
out.println("<p>Database connection successfully created!</p>");

while (rs.next()) {
out.println("<p>The book's name is: " + rs.getString("book") +"</p>");
}
out.println("</body></html>");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

public void destroy() {
try {
conn.close();
} catch(SQLException e){}
}
}

如果不想使用数据源连接数据库的话,可以参考下面的方法,在jsp页面中直接连接。
注意:jcc.mdb与Select.jsp要在同一目录下

<%@page contenttype="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<html>
<body>
<%
try{
class.forname("sun.jdbc.odbc.jdbcodbcdriver");
}
catch(classnotfoundexception e){
out.print(e);
}
try{
string strdirpath=application.getrealpath(request.getrequesturi());
strdirpath=strdirpath.substring(0,strdirpath.lastindexof('\'))+"\";
string url = "jdbc:odbc:driver={microsoft access driver (*.mdb)};dbq="+strdirpath+"jcc.mdb";
connection conn = drivermanager.getconnection(url);
statement stmt = conn.createstatement();
resultset rs = stmt.executequery("select * from user");
out.println("user-list"+"<br>");
while(rs.next()){
out.print(rs.getstring(1)+" ");
out.print(rs.getstring(2)+"<br>");
}
rs.close();
stmt.close();
conn.close();
}
catch(exception ex){
out.print(ex);
}
%>
</body>
</html>