java解析MDB檔案的方法,已經寫成公用方法

NO IMAGE

近期,有人和我說某些企業的資料是儲存在Access庫中,該檔案以點mdb(.mdb)結尾,新人也許不知道Access。它是微軟的辦公軟體儲存形式,與office一樣,是很早期的儲存方案。

Java 為Access提供瞭解決方案,一種是橋接模式,即odbc形式,它不需要導任何包,因為它被封裝在JDK1.7中,而如今,使用JDK1.8的較多,因為JDK6和JDK7並沒有什麼大改進,就像iPhone6和iPhone7,沒啥變化,但願IPhone8不會讓我們大失所望,雖然我現在仍然用iPhone5S。

插播一段廣告(我這電話用4年了快,16G的,居然不卡。要是安卓估計早就廢了,難道這就是開源的弊端?雖然我很愛國,但也希望山寨機能加強點,別打臉啊)。

再看看JDK1.8,真可謂翻雲覆雨啊!我個人對併發比較感興趣,所以當它出來的時候,就喜歡CompleteFuture加上流式程式設計。扯遠了,說說怎麼解析Mdb吧。顯然Jdk1.8取代了橋接模式。所以你解析時總會報錯,告訴你沒有這種型別的驅動器。那是不是就沒辦法了呢!不是的,這裡我介紹一個jar包,Access_JDBC30.jar,這東西就和mysql驅動性質一樣,只不過使用方法有所差異。

	/**
* @category mdb檔案的解析
* @author PQF
*/
public static List<Map<String, String>> resolverMdb(String mdbPath,
String sql, Object... column) throws Exception {
List<Map<String, String>> entityList = new ArrayList<>();
if (mdbPath.isEmpty() || sql.isEmpty() || column.length < 1) {
throw new Exception("mdb檔案路徑不能為空或者SQL語句不能為空,並且列的長度不能小於1");
}
Properties prop = new Properties();
prop.put("charSet", "UTF-8");
String dbUr1 = "jdbc:Access:///"   mdbPath;
Class.forName("com.hxtt.sql.access.AccessDriver").newInstance();
try (Connection conn = DriverManager.getConnection(dbUr1, prop);
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery(sql)) {
Map<String, String> mapList = null;
while (result.next()) {
mapList = new HashMap<>();
for (Object col : column) {
mapList.put((String) col, result.getString((String) col));
}
entityList.add(mapList);
}
} catch (Exception e) {
e.printStackTrace();
}
return entityList;
}

這裡注意兩點:1.String dbUr1 = “jdbc:Access:///” mdbPath;

標紅的地方(jdbc:Access:///)千萬不能去掉啊!!!!

2.Class.forName(“com.hxtt.sql.access.AccessDriver”).newInstance();

驅動名稱是固定的,別瞎改!!!後面的newInstance(),可以加,也可以不加。

此方法已讓我編寫的十分簡單,傳送一個檔案路徑,然後一段查詢的SQL,和你要查詢的列的名稱即可。什麼???你說你不會用???別鬧了朋友,你搞笑呢???自己琢磨吧!!!

感謝讀者的光顧。