java中采用ODBC方式连接Access数据库

1、新建数据库:

在Access中新建数据库reckon.accdb(我本地的Access是2007的,2003的拓展名为mdb),存放在D盘Access目录下。

2、安装Access驱动程序:

从“开始——>控制面板——>系统和安全——>管理工具——>数据源(ODBC)——>系统驱动”中查看是否安装Access的ODBC驱动程序。若不存在则需要安装Microsoft Access驱动程序。

官方:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255
32位:http://download.microsoft.com/download/E/4/2/E4220252-5FAE-4F0A-B1B9-0B48B5FBCCF9/AccessDatabaseEngine.exe
64位:http://download.microsoft.com/download/E/4/2/E4220252-5FAE-4F0A-B1B9-0B48B5FBCCF9/AccessDatabaseEngine_X64.exe

有时候系统中明明安装了Access驱动程序,但是依旧显示未安装,就像我本地一样:

我已经安装了Access,但是这里显示的只有SQL Server的两个驱动。原因我不知道,我只知道怎么可以看到完全的。打开“C:\Windows\SysWOW64”文件夹,找到odbcad32.exe执行程序,“以管理员身份运行”,然后就会看到一大堆驱动程序,Access驱动程序也在里边:

(注意:在从文件夹打开之前,记得关闭以前的ODBC数据源管理器,否则显示的还是以前那个)。

3、配置ODBC数据源:

第一步,在“ODBC数据源管理器”中切到“系统DSN”选项卡,点击右侧的“添加”按钮,在弹出的“创建新数据源”框中选择“Microsoft Access Driver(*.mdb,*.accdb)”,这个驱动可以兼容mdb和accdb文件,所以选这个,选完了点击“完成”。


第二步,在“ODBC Microsoft Access 安装”对话框中设置数据源名称并选择数据库。

数据源名称:随便填,但是最后有意义,我这里是reckon

说明:可以不填

数据库:点击“选择”按钮,在弹出框中,定位到D盘Access目录,此时左侧会显示选定目录下的Access数据库文件,如如。选定reckon.accdb数据库,点击确定。


 第三步,返回到“系统DSN”选项卡,“系统数据源”里多出了我刚刚添加的reckon数据源。

 

4、使用Java代码链接Access数据库:

package com.wjl.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

public class DBConnection {
	 static Connection connect = null;
	 static PreparedStatement stmt = null;
	 static ResultSet rs = null;
	/**
	 * 该方法用来连接数据库
	 * @param db:数据源名称
	 * */
	private DBConnection(String db){
		try{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注册驱动
			//Access中的数据库默认编码为GBK,本地项目为UTF-8,若不转码会出现乱码
			Properties p = new Properties();
            p.put("charSet", "GBK");
			connect = DriverManager.getConnection("jdbc:odbc:"+db,p);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	/**
	 * 该方法用来执行SQL并返回结果集
	 * */
	public static ResultSet selectQuery(String db,String sql){
		try{
			stmt = getConnect(db).prepareStatement(sql);
			rs = stmt.executeQuery();//执行SQL
		}catch(Exception e){
			e.printStackTrace();
		}
		return rs;
	}
	
	public static Connection getConnect(String db){
		DBConnection  conn = new DBConnection(db);
		return connect;
	}
	
	/**
	 * 该方法用来关闭连接
	 * */
	public static void closeConn() {
		try {
			rs.close();
			stmt.close();
			connect.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 测试
	 * */
	public static void main(String[] args){
		try{
			DBConnection connnect = new DBConnection("reckon");
			if(connect!=null){
				System.out.println(connect+"\n连接成功");
			}else{
				System.out.println("连接失败");
			}
			rs= selectQuery("reckon","select * from table1");
			if(rs!=null){
				while(rs.next()){
					System.out.println(rs.getString(1)+"\t"+rs.getString(2));  
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			closeConn();//关闭链接
		}
	}
}

5、遇到的问题:

a、中文乱码问题。Access数据库默认以GBK编码,系统中的项目一般以UTF-8编码,因此容易出现乱码,所以在上面的代码中添加了编码处理,也就是:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注册驱动
Properties p = new Properties();
p.put("charSet", "GBK");
connect = DriverManager.getConnection("jdbc:odbc:"+db,p);

b、classNotFound:sun.jdbc.odbc.JdbcOdbcDriver。这个驱动可以找相应的jar包也可以用JDK里面集成的。我这里就是用的集成的。在jdk1.6中有这个驱动,但是1.8却没有这个,因此要是使用1.8的jre环境就需要手动导入rt.jar,这样子就不会报这个异常啦。

c、java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

这个错误看起来是说数据源没有配置,但是我的数据源已经配置过了且配置正确的情况下一运行还是报这个错,不知道问题何在。后来换成1.6的jre就能执行成功,换成1.8的就接着这个错,可能是jre环境的问题吧。我本地有两个jre,1.6是32位的,1.8是64位的,MyEclipse是64位的,Access数据库是32位的。估计跟这些个环境有间接关系吧。

猜你喜欢

转载自1017401036.iteye.com/blog/2260786