Access 是通过 ODBC 连接的. Excel 也可以. 甚至可以动态构造连接字符串:
这样可以直接连接到 Access 数据库文件.
jdbc:odbc:DRIVER={Microsoft Access Driver (.mdb)};DBQ=c:\mydata.mdb
类似的 Excel 文件也可以用类似方法:
jdbc:odbc:Driver={Microsoft Excel Driver (
.xls)};DBQ=.\mydata.xls
DBF 应该也可以这样来做.

 

只支持 Windows 系统

驱动程序是 JDK 自带的 jdbc-odbc bridge.

 

2003年的笔记:

异常处理代码这里省略了.
// 读取 Access 文件名
String fileName = "test.mdb";
File file = new File(fileName);

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 用 ODBC 访问 Access 文件
Connection conn = DriverManager.getConnection(
  "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + file.getCanonicalPath(),
  "", "");
…. // 正常的数据库操作代码

// 读取 EXCEL 文件名
String fileName = "test.xls";
File file = new File(fileName);

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 用 ODBC 访问 EXCEL 文件
Connection conn = DriverManager.getConnection(
  "Driver={Microsoft Excel Driver (*.xls)};DBQ=" + file.getCanonicalPath(),
  "", "");
…. // 正常的数据库操作代码
// 注意 *.xls 文件读取会有一些问题, 例如第一行会被认为是列名, 如工作薄名为 sheet1, 则 SQL 语句中的表名需要是这样: [sheet1$]

已经测试通过了. 希望通过这种方法, 使那些使用 Access + JSP 在 Windows 下开发程序的同志们的程序可以无须再要求最终用户在 ODBC 数据源里进行笨拙的配置, 而真正实现绿色软件, 只需复制文件到服务器目录即可使用, 使软件的安装更加简易化.

备注: 这个点子是参考 ASP 论坛的做法而想到的.

JSP 里面的使用示例:
// 读取 Access 文件名
String fileName = "WEB-INF/test.mdb";
File file = new File(application.getRealPath(fileName));

//….

 

附他人代码片段:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmntNew = null;
        String sqlstr = “select      from   ren   “;
        try {
            Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
//ren.mdb放项目目录下
            String url = “jdbc:odbc:Driver={Microsoft Access Driver (
.mdb)}; DBQ=ren.mdb”;
            conn = DriverManager.getConnection(url, “sa”, “”);
            stmntNew = conn.createStatement();
            ResultSet rs = stmntNew.executeQuery(sqlstr);
            while (rs.next()) {
                System.out.println(rs.getString(“xingming”));
            }
        } catch (SQLException e1) {
            System.out.println(e1.getMessage());
        } catch (Exception e) {
            System.err.println(e);
        } finally {
            try {
                stmntNew.close();
                conn.close();
            } catch (Exception e) {
                System.err.println(e);
            }
        }

    }
}

 

import java.sql.*;

public class javaExcel{

public static void main(String args[]) throws Exception{

  Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

  String dburl =”jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=Mobile.xls”;//此为NO-DSN方式

  //String dburl =”jdbc:odbc:odbcName”;//此为ODBC连接方式

  Connection conn=DriverManager.getConnection(dburl);

  Statement stmt=conn.createStatement();

  ResultSet rs=stmt.executeQuery(“select Top 20 * from [Sheet1$]”);

  while(rs.next()){

   System.out.println(rs.getString(1));

  }

  rs.close();

  stmt.close();

  conn.close();

}

}

 

附下这篇文章好像是我2003~2005年写的, 具体记不清了, 因为当时项目用到了导入Excel这个需求, 应该是我的笔记, 但也许是别人写的吧, 时间太久了:

今天一个哥们问,用jdbc能不能把excel作为数据源访问?

考虑之前写的一个java访问access的例子,稍加修改,测试可以用。

测试例子,新建一个excel,命名为Mobile.xls,在Sheet1里写入如下两行:

手机号

13900000001.0

java代码如下:

import java.sql.*;

public class javaExcel{

public static void main(String args[]) throws Exception{

  Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

  String dburl =”jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=Mobile.xls”;//此为NO-DSN方式

  //String dburl =”jdbc:odbc:odbcName”;//此为ODBC连接方式

  Connection conn=DriverManager.getConnection(dburl);

  Statement stmt=conn.createStatement();

  ResultSet rs=stmt.executeQuery(“select Top 20 * from [Sheet1$]”);

  while(rs.next()){

   System.out.println(rs.getString(1));

  }

  rs.close();

  stmt.close();

  conn.close();

}

}

运行以上代码,显示:

13900000001.0

没有读到第一行,考虑到程序是否默认第一行为列名了呢?试一下用metadata是否可以拿到。如下修改代码:

import java.sql.*;

public class javaExcel{

public static void main(String args[]) throws Exception{

  Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

  String dburl =”jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=Mobile.xls”;//此为NO-DSN方式

  //String dburl =”jdbc:odbc:odbcName”;//此为ODBC连接方式

  Connection conn=DriverManager.getConnection(dburl);

  PreparedStatement stmt=conn.prepareStatement(“select Top 20 * from [Sheet1$]”);

  ResultSet rs=stmt.executeQuery();

  ResultSetMetaData rsmd=stmt.getMetaData();

  System.out.println(rsmd.getColumnName(1));

  while(rs.next()){

   System.out.println(rs.getString(1));

  }

  rs.close();

  stmt.close();

  conn.close();

}

}

运行以上代码,显示:

手机号

13900000001.0

看来猜测没错。

此方法使用excel,只在windows并安装excel的机器上测试过,没有测试其他环境。

此方法的限制,对数据类型受制于excel,细心点可以看到手机号后面多了一个.0,变成了数字型;所以访问excel还是建议使用jxls或jexcelapi等api来操作,这样可以访问类型更丰富的、布局更复杂的excel。

jxls:

http://jxls.sourceforge.net

jexcelapi:

http://jexcelapi.sourceforge.net/

转载请注明:WebLogic Android 博客 » Java 应用无需设置 ODBC 数据源直接访问Excel 和 Access 文件(仅适用于Windows平台)