mysql odbc连接 mdb_java中采用ODBC方式连接Access数据库
1、新建數(shù)據(jù)庫:
在Access中新建數(shù)據(jù)庫reckon.accdb(我本地的Access是2007的,2003的拓展名為mdb),存放在D盤Access目錄下。
2、安裝Access驅(qū)動(dòng)程序:
從“開始——>控制面板——>系統(tǒng)和安全——>管理工具——>數(shù)據(jù)源(ODBC)——>系統(tǒng)驅(qū)動(dòng)”中查看是否安裝Access的ODBC驅(qū)動(dòng)程序。若不存在則需要安裝Microsoft Access驅(qū)動(dòng)程序。
有時(shí)候系統(tǒng)中明明安裝了Access驅(qū)動(dòng)程序,但是依舊顯示未安裝,就像我本地一樣:
我已經(jīng)安裝了Access,但是這里顯示的只有SQL Server的兩個(gè)驅(qū)動(dòng)。原因我不知道,我只知道怎么可以看到完全的。打開“C:\Windows\SysWOW64”文件夾,找到odbcad32.exe執(zhí)行程序,“以管理員身份運(yùn)行”,然后就會(huì)看到一大堆驅(qū)動(dòng)程序,Access驅(qū)動(dòng)程序也在里邊:
(注意:在從文件夾打開之前,記得關(guān)閉以前的ODBC數(shù)據(jù)源管理器,否則顯示的還是以前那個(gè))。
3、配置ODBC數(shù)據(jù)源:
第一步,在“ODBC數(shù)據(jù)源管理器”中切到“系統(tǒng)DSN”選項(xiàng)卡,點(diǎn)擊右側(cè)的“添加”按鈕,在彈出的“創(chuàng)建新數(shù)據(jù)源”框中選擇“Microsoft Access Driver(*.mdb,*.accdb)”,這個(gè)驅(qū)動(dòng)可以兼容mdb和accdb文件,所以選這個(gè),選完了點(diǎn)擊“完成”。
第二步,在“ODBC Microsoft Access 安裝”對(duì)話框中設(shè)置數(shù)據(jù)源名稱并選擇數(shù)據(jù)庫。
數(shù)據(jù)源名稱:隨便填,但是最后有意義,我這里是reckon
說明:可以不填
數(shù)據(jù)庫:點(diǎn)擊“選擇”按鈕,在彈出框中,定位到D盤Access目錄,此時(shí)左側(cè)會(huì)顯示選定目錄下的Access數(shù)據(jù)庫文件,如如。選定reckon.accdb數(shù)據(jù)庫,點(diǎn)擊確定。
第三步,返回到“系統(tǒng)DSN”選項(xiàng)卡,“系統(tǒng)數(shù)據(jù)源”里多出了我剛剛添加的reckon數(shù)據(jù)源。
4、使用Java代碼鏈接Access數(shù)據(jù)庫:
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;
/**
* 該方法用來連接數(shù)據(jù)庫
* @param db:數(shù)據(jù)源名稱
* */
private DBConnection(String db){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注冊(cè)驅(qū)動(dòng)
//Access中的數(shù)據(jù)庫默認(rèn)編碼為GBK,本地項(xiàng)目為UTF-8,若不轉(zhuǎn)碼會(huì)出現(xiàn)亂碼
Properties p = new Properties();
p.put("charSet", "GBK");
connect = DriverManager.getConnection("jdbc:odbc:"+db,p);
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 該方法用來執(zhí)行SQL并返回結(jié)果集
* */
public static ResultSet selectQuery(String db,String sql){
try{
stmt = getConnect(db).prepareStatement(sql);
rs = stmt.executeQuery();//執(zhí)行SQL
}catch(Exception e){
e.printStackTrace();
}
return rs;
}
public static Connection getConnect(String db){
DBConnection conn = new DBConnection(db);
return connect;
}
/**
* 該方法用來關(guān)閉連接
* */
public static void closeConn() {
try {
rs.close();
stmt.close();
connect.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 測(cè)試
* */
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();//關(guān)閉鏈接
}
}
}
5、遇到的問題:
a、中文亂碼問題。Access數(shù)據(jù)庫默認(rèn)以GBK編碼,系統(tǒng)中的項(xiàng)目一般以UTF-8編碼,因此容易出現(xiàn)亂碼,所以在上面的代碼中添加了編碼處理,也就是:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注冊(cè)驅(qū)動(dòng)
Properties p = new Properties();
p.put("charSet", "GBK");
connect = DriverManager.getConnection("jdbc:odbc:"+db,p);
b、classNotFound:sun.jdbc.odbc.JdbcOdbcDriver。這個(gè)驅(qū)動(dòng)可以找相應(yīng)的jar包也可以用JDK里面集成的。我這里就是用的集成的。在jdk1.6中有這個(gè)驅(qū)動(dòng),但是1.8卻沒有這個(gè),因此要是使用1.8的jre環(huán)境就需要手動(dòng)導(dǎo)入rt.jar,這樣子就不會(huì)報(bào)這個(gè)異常啦。
c、java.sql.SQLException: [Microsoft][ODBC 驅(qū)動(dòng)程序管理器] 未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認(rèn)驅(qū)動(dòng)程序
這個(gè)錯(cuò)誤看起來是說數(shù)據(jù)源沒有配置,但是我的數(shù)據(jù)源已經(jīng)配置過了且配置正確的情況下一運(yùn)行還是報(bào)這個(gè)錯(cuò),不知道問題何在。后來換成1.6的jre就能執(zhí)行成功,換成1.8的就接著這個(gè)錯(cuò),可能是jre環(huán)境的問題吧。我本地有兩個(gè)jre,1.6是32位的,1.8是64位的,MyEclipse是64位的,Access數(shù)據(jù)庫是32位的。估計(jì)跟這些個(gè)環(huán)境有間接關(guān)系吧。
總結(jié)
以上是生活随笔為你收集整理的mysql odbc连接 mdb_java中采用ODBC方式连接Access数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NDoc1.3.1使用手册
- 下一篇: 怎么判断间隙过渡过盈配合_间隙配合 过盈