原文链接:http://www.benchresources.net/jdbc-msaccess-database-connection-steps-in-java-8/
最近期末把手头上的事情做完,闲着无聊,捣鼓了一下 Java 的数据库连接,先从最基础的微软的 Access 开始下手。一开始从网上搜的教程 JDK 版本太老,在 JDK1.8 上无法适用,还有的教程需要修改系统上的 ODBC 数据资源管理程序,实在是太繁琐,于是自行 Google 了一把,找到了如上的良心教程。
JDK1.8 是无法直接连接微软的 Access 数据库的,在网上查找了一下原因,大概意思就是 Java 从 JDK1.6 之后就移除了Access 桥接驱动,因此不再支持 jdbc:odbc 桥接方式,需要下载 Access 驱动 jar 包(Access_JDBC30.jar)。但是这个驱动包我自己 Google 了一下,发现并没找到官方下载地址,CSDN 上倒是有,但需要积分才能下载,并且这个驱动包好像有使用次数限制(只能用50次),很不友好。
而上面教程中的 UCanAcsess 免费开源,下载地址为:https://sourceforge.net/projects/ucanaccess/files/。这里,我选择下载:UCanAccess-4.0.3-bin.zip。解压之后得到我们需要的五个文件如下:
其中,前 4 个文件在:UCanAccess-4.0.3-bin\bin\ 目录下,最后一个文件在:UCanAccess-4.0.3-bin\ 目录下。然后在Eclipse 中将这 5 个文件添加到 Java 项目中。具体做法为:右击创建的 Access 连接项目-->Build Path-->Configure Build Path-->Libraries-->Add External JARs。
最后附上教程的源代码:
package com.Acess;
import java.sql.*;
public class Acess {
public static void main(String[] args) throws Exception {
// variables
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
// Step 1: Loading or registering Oracle JDBC driver class
try {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
} catch (ClassNotFoundException cnfex) {
System.out.println("Problem in loading MS Access JDBC driver");
cnfex.printStackTrace();
}
// Step 2: Opening database connection
try {
String msAccDB = "D:/a1.accdb";
String dbURL = "jdbc:ucanaccess://" + msAccDB;
// Step 2.A: Create and get connection using DriverManager Class
connection = DriverManager.getConnection(dbURL);
// Step 2.B: Creating JDBC Statement
statement = connection.createStatement();
// step 2.C: Executing SQL &retrieve data into ResultSet
resultSet = statement.executeQuery("select * from student");
//processing returned data and printing into console
while(resultSet.next()) {
System.out.println(resultSet.getInt(1) + "\t" +
resultSet.getString(2) + "\t" +
resultSet.getString(3) + "\t" +
resultSet.getString(4));
}
}
catch (SQLException sqlex) {
sqlex.printStackTrace();
}
finally {
// Step 3: Closing database connection
try {
if(null != connection) {
// cleanup resources, once after processing
resultSet.close();
statement.close();
// and then finally close connection
connection.close();
}
} catch (SQLException sqlex) {
sqlex.printStackTrace();
}
}
}
}