Java 直接连接access 问题
网络上找的例子程序,稍做修改。但结果出不来。
请各位达人帮下忙。
<%@page import="java.sql.*"
import ="java.util.*"
import ="java.io.*"
import="java.text.*"
contentType="text/html"
buffer="20kb"
%>
<%!
int all,i,m_count;
String odbcQuery;
Connection odbcconn;
Statement odbcstmt;
ResultSet odbcrs;
String username,title,content,work,email,url,time,date;
String datetime;
%>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){
out.print("NULL");
}
try{
odbcconn = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=C:\\timesheet\\data\\timesheet.mdb");
odbcstmt = odbcconn.createStatement();
odbcQuery="Select * From M_Country ";
odbcrs=odbcstmt.executeQuery(odbcQuery);
odbcrs.close();
odbcstmt.close();
odbcconn.close();
out.print("OK");
}
catch(SQLException e){
out.print(e);
}
%>
问题点数:100、回复次数:20Top
1 楼ltp4(没心二少)回复于 2004-09-02 17:46:14 得分 0
调了一下午,只好求助各位了。Top
2 楼jimsons(路漫漫其修远兮)回复于 2004-09-02 17:53:28 得分 10
代码如下:
<%
Connection con;
Statement sql;
ResultSet rs;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
}catch(ClassNotFoundException e){out.print(e.getMessage());}
try
{
String dbpath=request.getServletPath().substring(0,request.getServletPath().indexOf("/",1)+1);
if(dbpath.trim().equals(""))dbpath="/";
String url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+application.getRealPath("")+dbpath+"puyou.mdb;";
con=DriverManager.getConnection(url,"","");
sql=con.createStatement();
out.print("yes<p>");
rs=sql.executeQuery("SELECT * FROM star");
%>Top
3 楼szabo(阿波哥)回复于 2004-09-02 17:54:59 得分 5
DBQ=C:\\timesheet\\data\\timesheet.mdb
有问题!
将\\改为/试试。Top
4 楼wxt1013(每晚抱着Java睡觉......)回复于 2004-09-02 19:27:25 得分 10
给你一个连接Access的例子,你自己参考一下:
Connection conn=null;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:C:\\timesheet\\data\\timesheet.mdb","","");
if(conn == null){
out.println("conn is null !");
return;
}
Statement state_ment=conn.createStatement();
ResultSet rest=tbloperate.state_ment.executeQuery(SQL);
while(rest.next()){
rest.getString("ShohinNm");
rest.getString("ShohinKbn");
}
}catch(ClassNotFoundException e){
out.println("\nSQLException--------------------");
out.println("ModelSQLState:"+e.getSQLState());
}
Top
5 楼wxt1013(每晚抱着Java睡觉......)回复于 2004-09-02 19:32:26 得分 25
conn=DriverManager.getConnection("jdbc:odbc:C:\\timesheet\\data\\timesheet.mdb","","");
上面这种连接经常会出错,连接不上,类似情况我也遇到.如果是这样,可以这样解决:
在你的ODBC数据源里面新建一个数据源:MyDatabase,让MyDatabase指向你的数据库: C:\\timesheet\\data\\timesheet.mdb,然后将数据库连接语句改为:
conn=DriverManager.getConnection("jdbc:odbc:MyDatabase","","");
其他语句都不变,这样肯定不会再出错.
:) 祝成功!Top
6 楼ltp4(没心二少)回复于 2004-09-03 08:58:32 得分 0
先谢过各位,今天继续调试。Top
7 楼LittleLandlord(小地主)回复于 2004-09-03 09:12:46 得分 10
odbcconn = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=C:\\timesheet\\data\\timesheet.mdb"); 这句少了用户名称和密码,应改为
DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\timesheet\\data\\timesheet.mdb","","");Top
8 楼Shires(Trombone)回复于 2004-09-03 09:17:51 得分 0
upTop
9 楼LittleLandlord(小地主)回复于 2004-09-03 09:25:58 得分 5
数据库连接应该没问题了,还有什么错误提示?Top
10 楼Pkoy(笑剑)回复于 2004-09-03 09:35:37 得分 0
LittleLandlord(小地主) DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\timesheet\\data\\timesheet.mdb","","");
我做JDBC访问数据库时没有加过DBQ,如果加了DBQ=...以后,还需要配置ODBC吗?Top
11 楼ltp4(没心二少)回复于 2004-09-03 09:37:53 得分 0
直接连接access还是没成功,只好先用数据源的方法连接了。以后再试。
多谢各位,结帖了。Top
12 楼windust3313(蓝天)回复于 2004-09-03 09:39:36 得分 0
我看这上面连接的都是用绝对路径连Access,不知能不能用相对路径来连Top
13 楼LittleLandlord(小地主)回复于 2004-09-03 09:44:31 得分 5
加了DBQ就不用配置ODBC了,相对路径为DBQ=.\\data\example.mdb(表示当前应用程序目录下data下的MDB),另外DBQ=..\\表示当前应用程序目录上一级目录下Top
14 楼yupingping(平平)回复于 2004-09-03 09:44:32 得分 0
upTop
15 楼ltp4(没心二少)回复于 2004-09-03 09:45:39 得分 0
例子文章上特别说明只用于绝对路径。
Top
16 楼ltp4(没心二少)回复于 2004-09-03 09:52:03 得分 0
提示信息是:“java.sql.SQLException: [Microsoft][ODBC Driver Manager] ??? ???????????????????????????? ”
--奇怪了。Top
17 楼LittleLandlord(小地主)回复于 2004-09-03 10:04:02 得分 25
相对路径也可以,注意大小写问题,给你个例子:
public class DbFactory {
public DbFactory() {
}
private String userName = "";
private String password = "";
private String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\temp\\mss1.mdb";
private java.sql.Connection connection;
protected ResultSet resultSet = null;
protected ResultSetMetaData resultSetMetaData = null;
private java.sql.Statement statement=null;
/*
创建一个连接
*/
private Connection getNewConnection() {
try {
this.connection.close(); //试图关闭连接
}
finally {
this.connection = null; //释放连接
try {
Class.forName(this.driverName); //加载驱动程序
try {
this.connection = DriverManager.getConnection(this.url, this.userName,this.password);
}
catch (SQLException e) {
JOptionPane.showMessageDialog(null, url);
System.exit(0);
throw e;
}
}
finally {
return this.connection; //返回新建立的连接
}
}
}
public java.sql.Connection getConnection() {
if (connection != null) {
try {
if (connection.isClosed()) {
connection = null;
getNewConnection();
}
}
catch (SQLException ex) {
}
}
if (connection == null) { //没有设置连接则创建一个连接
getNewConnection();
}
return connection;
}
}Top
18 楼niyboy(I Love J2EE)回复于 2004-09-03 10:09:45 得分 5
该说的楼上的都已经说完了;
楼主你认真仔细检查一下;
Top
19 楼ltp4(没心二少)回复于 2004-09-03 10:13:50 得分 0
多谢各位了。还是先结帖,给分。Top
20 楼ltp4(没心二少)回复于 2004-09-06 11:13:56 得分 0
虽然已经结帖了,但还是要和大家说声抱歉。
以上测试不成功的原因是字符的全角半角所引起的。
测试通过的代码为:
<%@page import="java.sql.*" %>
<%!
Connection odbcconn;
Statement odbcstmt;
ResultSet odbcrs;
String odbcSQL;
%>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){
out.print("NULL");
}
try{
odbcconn = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\tomcat401\\webapps\\timesheet\\data\\timesheet.mdb","","");
odbcstmt=odbcconn.createStatement();
odbcSQL="select * from M_Country";
odbcrs=odbcstmt.executeQuery("select * from M_Country");
while(odbcrs.next()){
out.print(odbcrs.getString("CountryCode"));
out.print(odbcrs.getString("CounttryName"));
}
odbcrs.close();
odbcstmt.close();
odbcconn.close();
out.print("OK");
}
catch(SQLException e){
out.print(e);
}
%>Top




