日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java odbc 实现access连接并导出mdb格式文件

發(fā)布時(shí)間:2023/12/20 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java odbc 实现access连接并导出mdb格式文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、前言
  • 二、概述
  • 三、具體實(shí)現(xiàn)
    • 1、思路
    • 2、access數(shù)據(jù)庫連接
    • 3、環(huán)境搭建(如果jdk版本低于8,可以直接跳過)
    • 4、代碼
  • 四、總結(jié)

一、前言

知識(shí)是偉大的,奉獻(xiàn)知識(shí)的人更是偉大的!
java生成Access數(shù)據(jù)庫文件
https://community.yellowfinbi.com/knowledge-base/article/moving-the-jdbc-odbc-bridge-from-java-7-to-java-8
java連接access數(shù)據(jù)庫的三種方式
從以上博客中深受啟發(fā)。

二、概述

  • 最近應(yīng)項(xiàng)目要求,需要將項(xiàng)目數(shù)據(jù)導(dǎo)出成.mdb格式文件,而.mdb格式文件本身是access數(shù)據(jù)庫文件。所以問題變成從 系統(tǒng)數(shù)據(jù)庫(postgreSQL)中讀取數(shù)據(jù),然后將數(shù)據(jù)寫入到.mdb文件中。
  • 環(huán)境:
    |配置|版本|
    | 系統(tǒng) | win10 |
    | access | access 97 |
    | jdk | jdk8 |
  • 三、具體實(shí)現(xiàn)

    1、思路

    大致思路如下:

    • 導(dǎo)出模板:服務(wù)端必須存在一個(gè)空白的access數(shù)據(jù)庫mdb格式文件(且該文件必須在本機(jī)上可以打開,總結(jié)里會(huì)提到)
    • 服務(wù)器將mdb模板復(fù)制到本地指定的某個(gè)路徑下,如C:\data.mdb(作為數(shù)據(jù)庫/源)
    • 當(dāng)前端用戶發(fā)起請求后,后臺(tái)從postgre數(shù)據(jù)庫中獲取相應(yīng)的數(shù)據(jù)保存到內(nèi)存
    • 代碼嘗試連接該數(shù)據(jù)庫,然后將內(nèi)存中的數(shù)據(jù)添加到數(shù)據(jù)庫中
    • 讀取寫完之后的data.mdb文件,返回給前端進(jìn)行下載

    2、access數(shù)據(jù)庫連接

    要實(shí)現(xiàn)將數(shù)據(jù)寫到mdb文件中,與word、pdf或者txt文件格式不同,mdb本身是數(shù)據(jù)格式文件,其中包括有access數(shù)據(jù)庫的模式、表格、字段等格式限制,需要根據(jù)相對應(yīng)的字段來填入相應(yīng)的數(shù)據(jù)。所以我們應(yīng)該如使用oracle、mysql或者postgre一樣,使用sql語言來進(jìn)行操作。

    • 連接access數(shù)據(jù)庫,網(wǎng)上的內(nèi)容有很多,但是都比較雜亂,不具有針對性。沒有特別細(xì)致的介紹,所以筆者打通了其中一種方法,供后來者參考。
    • 現(xiàn)在網(wǎng)上存在的三種方法分別如下:
      ① 電腦配置數(shù)據(jù)源結(jié)合java實(shí)現(xiàn)
      ② 純java代碼實(shí)現(xiàn)
      ③ 使用RmiJdbc.jar(遠(yuǎn)程連接的方法)

      本文主要針對第二種方法進(jìn)行實(shí)現(xiàn)。

    3、環(huán)境搭建(如果jdk版本低于8,可以直接跳過)

    要通過JDBC-ODBC橋接器的方式,連接access數(shù)據(jù)庫只能使用jdk1.8以下的版本,因?yàn)镴DK1.8已經(jīng)在JDK包里去除了這個(gè)類,所以系統(tǒng)找不到該類,將會(huì)出現(xiàn)以下錯(cuò)誤。

    但是如果要將jdk版本還原到1.7版本,顯然是不可能的。
    幸運(yùn)的是,我們找到了解決辦法

    其中的jdbc.jar包,可以到網(wǎng)上下載,亦或使用Tomcat中l(wèi)ib文件中的jdbc.jar包,其實(shí)是一樣的。
    環(huán)境配置好之后,剩下的就是擼代碼了!!!!

    4、代碼

    可以將與access數(shù)據(jù)庫的連接封裝成一個(gè)工具類,方便后期調(diào)用。

    /*** @Description:Access數(shù)據(jù)庫連接類* @author:Yex* @data: 2019年12月9日 下午2:53:36*/ class ConnectionAccessDB {private static Connection connection = null; private static java.sql.Statement statement;private static String blankMdbFilePath; //空白mdb文件路徑// 新mdb文件路徑 public static String defaultSavedMdbFilePath = "C:\\data.mdb"; // 新mdb文件名 //public static final String defaultSavedMdbFileName = "data.mdb"; // mdb文件后綴 public static final String defaultSavedMdbFileExtension = ".mdb"; // 需要保存到的新的mdb文件路徑和名 private static String savedMdbFilePathAndName = defaultSavedMdbFilePath; public ConnectionAccessDB() {}public ConnectionAccessDB(String blankMdbFilePath) {this.blankMdbFilePath = blankMdbFilePath;}public ConnectionAccessDB(String blankMdbFilePath, String defaultSaveMdbFilePath) {this.blankMdbFilePath = blankMdbFilePath;this.defaultSavedMdbFilePath = defaultSaveMdbFilePath;}/*** 外部連接數(shù)據(jù)庫* @throws SQLException */public Connection connected() throws SQLException{try {//獲取xml配置數(shù)據(jù)庫連接屬性Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //+ ";DriverID=22;READONLY=true}"String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + savedMdbFilePathAndName.trim() ; Properties pro = new Properties(); pro.setProperty("charSet","GB2312"); connection = DriverManager.getConnection(database, pro); statement = connection.createStatement(); } catch (ClassNotFoundException e) {e.printStackTrace();}return connection;}/*** @Description: 設(shè)置需要拷貝空白mdb所到的文件位置和名稱* @author: Yex* @date: 2019年12月9日 下午2:49:43*/public void setSavedFilePathAndName(String newFilePathAndName) { this.savedMdbFilePathAndName = newFilePathAndName; } /*** @Description: 刪除產(chǎn)生的文件* @author: Yex* @date: 2019年12月9日 下午2:50:36*/public void deleteOldMdbFile() throws Exception { File oldTargetFile = new File(savedMdbFilePathAndName); if (oldTargetFile.exists()) { oldTargetFile.delete(); } } /*** @Description: 將空白路徑 拷貝到 指定的特定路徑下,并作為數(shù)據(jù)源* @author: Yex* @date: 2019年12月9日 下午2:52:26*/public void copyBlankMdbFile() throws Exception { FileInputStream is = new FileInputStream(blankMdbFilePath);OutputStream out = new FileOutputStream(savedMdbFilePathAndName); byte[] buffer = new byte[1024]; int numRead; while ((numRead = is.read(buffer)) != -1) { out.write(buffer, 0, numRead); } is.close(); out.close(); }/*** @Description: 執(zhí)行sql語句* @author: Yex* @date: 2019年12月9日 下午2:52:50*/public void executeSql(String sql) throws Exception { statement.execute(sql); } /*** @Description: 關(guān)閉連接* @author: Yex* @date: 2019年12月9日 下午2:53:05*/public void closeConnection() throws Exception { statement.close(); connection.close(); } /*** @Description: 數(shù)據(jù)庫-插入語句* @author: Yex* @data: 2019年12月10日 下午3:54:35*/public void Insert(String tableName,String column, String values) throws SQLException {String sql = "INSERT INTO " + tableName + " (" + column + ")" + " values" + "(" + values + ")";statement.execute(sql);}/*** @Description: 數(shù)據(jù)庫-刪除語句* @author: Yex* @data: 2019年12月10日 下午4:02:42*/public void Delete(String tableName, String condition) throws SQLException {String sql = "DELETE FROM " + tableName + " WHERE" + condition;statement.execute(sql);} }

    注意!!!!!!!!!!!!!!!!!

    • 主要與access連接的代碼是:
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + savedMdbFilePathAndName.trim() ;

    Driver={Microsoft Access Driver (*.mdb, .accdb)}就是你的驅(qū)動(dòng)名稱,這個(gè)必須和你本地所存在的驅(qū)動(dòng)對應(yīng)起來,是同一個(gè)東西。
    其中,.mdb, *.accdb中逗號后面必須帶有空格!!!!!!!!!!
    DBQ=數(shù)據(jù)庫文件名稱。

    如果本地不存在上述驅(qū)動(dòng),那么會(huì)報(bào)錯(cuò) *[Microsoft][ODBC 驅(qū)動(dòng)程序管理器] 未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認(rèn)驅(qū)動(dòng)程序時(shí)。

    查看系統(tǒng)數(shù)據(jù)源: 搜索 “管理工具” -> 進(jìn)入 ODBC數(shù)據(jù)源 ->系統(tǒng)DSN -> 添加

    理應(yīng)如圖所示,如果彈出的頁面中無法找到數(shù)據(jù)源,請使用 AccessDatabaseEngine試試。

    四、總結(jié)

    由于項(xiàng)目要求,導(dǎo)出的格式必須為access97版本的數(shù)據(jù)庫格式,但是access 97版本的文件只有03年以前的office版本才能打開,其他任何版本的access均會(huì)提示“access無法打開應(yīng)用程序較早版本”,所以導(dǎo)致java代碼也無法正常連接access數(shù)據(jù)庫。最后筆者忍痛下載了office 2000。如果對導(dǎo)出的數(shù)據(jù)庫版本沒有要求,應(yīng)該不會(huì)存在該問題。

    總結(jié)

    以上是生活随笔為你收集整理的java odbc 实现access连接并导出mdb格式文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。