================================
©Copyright 蕃薯耀 2020-01-09
https://www.cnblogs.com/fanshuyao/
使用Ocbc連接是區分電腦是32位還是64位的,需要安裝相應的驅動文件,不方便,所以采用第三方的Jar包(UCanAccess)
UCanAccess-4.0.4-bin.zip(自行搜索)
需要的Jar包:
ucanaccess-4.0.4.jar
在Lib文件的jar包:
commons-lang-2.6.jar
commons-logging-1.1.3.jar
hsqldb.jar
jackcess-2.1.11.jar
import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.apache.log4j.Logger; import com.plan.commons.Row; import com.plan.commons.RowImpl; public class MdbUtils { private static Logger log = Logger.getLogger(MdbUtils.class); //odbc方式區分32位和64位系統 /* private final static String JDBC_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver"; private final static String JDBC_URL = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="; */ //使用UCanAccess private final static String JDBC_DRIVER = "net.ucanaccess.jdbc.UcanaccessDriver"; private final static String JDBC_URL = "jdbc:ucanaccess://"; public static void close(ResultSet resultSet, Statement statement, Connection connection){ try { if(resultSet != null){ resultSet.close(); //log.info("關閉mdb resultSet連接。"); //System.out.println("關閉mdb resultSet連接。"); } if(statement != null){ statement.close(); //log.info("關閉mdb statement連接。"); //System.out.println("關閉mdb statement連接。"); } if(connection != null){ connection.close(); //log.info("關閉mdb connection連接。"); //System.out.println("關閉mdb connection連接。"); } } catch (SQLException e) { e.printStackTrace(); log.error("關閉mdb連接出錯。" + e); } } /** * mdb文件獲取連接 * @param absoluteFilePath * @return */ public static Connection getConn(String absoluteFilePath){ log.info("mdb文件路徑absoluteFilePath=" + absoluteFilePath); Properties prop = new Properties(); prop.put("charset", "utf-8");//解決中文亂碼(GB2312/GBK) //prop.put("user", ""); //prop.put("password", ""); String url = JDBC_URL + absoluteFilePath; Connection connection = null; try { connection = DriverManager.getConnection(url, prop); } catch (SQLException e) { e.printStackTrace(); log.info("mdb文件獲取連接出錯。Exception=" + e); } return connection; } /** * 查詢mdb文件的表數據 * @param absoluteFilePath mdb文件絕對路徑 * @param sql 查詢的sql語句 * @return */ public static List<Row> read(String absoluteFilePath, String sql){ log.info("mdb文件路徑absoluteFilePath=" + absoluteFilePath); log.info("mdb查詢sql=" + sql); List<Row> rowList = new ArrayList<Row>(); Properties prop = new Properties(); prop.put("charset", "utf-8");//解決中文亂碼(GB2312/GBK) //prop.put("user", ""); //prop.put("password", ""); String url = JDBC_URL + absoluteFilePath; //PreparedStatement preparedStatement = null; Statement statement = null; ResultSet resultSet = null; Connection connection = null; try{ Class.forName(JDBC_DRIVER); connection = DriverManager.getConnection(url, prop); statement = connection.createStatement(); resultSet = statement.executeQuery(sql); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); while(resultSet.next()){ Row row = new RowImpl(); for(int i=1; i<= resultSetMetaData.getColumnCount(); i++){ String columnName = resultSetMetaData.getColumnName(i);//列名 Object columnValue = resultSet.getObject(i); row.addColumn(columnName, columnValue); } rowList.add(row); } }catch (Exception e) { e.printStackTrace(); log.info("mdb文件讀取sql出錯。Exception=" + e); throw new RuntimeException(e); }finally{ close(resultSet, statement, connection); } return rowList; } /** * 查詢mdb文件的表數據 * @param file File * @param sql 查詢的sql語句 * @return */ public static List<Row> read(File file, String sql){ return read(file.getAbsolutePath(), sql); } /** * 更新mdb文件的表數據,返回更新的記錄數量,0表示沒有更新(ID不允許更新) * @param absoluteFilePath mdb文件絕對路徑 * @param sql 查詢的sql語句 * @return */ public static int update(String absoluteFilePath, String sql){ log.info("mdb文件絕對路徑,absoluteFilePath=" + absoluteFilePath); log.info("mdb文件更新,sql=" + sql); Properties prop = new Properties(); prop.put("charset", "utf-8");//解決中文亂碼(GB2312/GBK) String url = JDBC_URL + absoluteFilePath; Statement statement = null; Connection connection = null; int updateSize = 0; try{ Class.forName(JDBC_DRIVER); connection = DriverManager.getConnection(url, prop); statement = connection.createStatement(); updateSize = statement.executeUpdate(sql); }catch (Exception e) { e.printStackTrace(); log.info("mdb文件更新sql出錯。Exception=" + e); throw new RuntimeException(e); }finally{ close(null, statement, connection); } log.info("mdb更新數量,updateSize=" + updateSize + "。sql="+sql); return updateSize; } /** * 更新mdb文件的表數據,返回更新的記錄數量,0表示沒有更新 * @param absoluteFilePath mdb文件絕對路徑 * @param sql 查詢的sql語句 * @return */ public static int update(String absoluteFilePath, String sql, List<Object> params){ log.info("mdb文件路徑absoluteFilePath=" + absoluteFilePath); log.info("mdb更新sql=" + sql); Properties prop = new Properties(); prop.put("charset", "utf-8");//解決中文亂碼(GB2312/GBK) String url = JDBC_URL + absoluteFilePath; PreparedStatement preparedStatement = null; Connection connection = null; int updateSize = 0; try{ Class.forName(JDBC_DRIVER); connection = DriverManager.getConnection(url, prop); preparedStatement = connection.prepareStatement(sql); if(params != null && params.size() > 0){ for(int i=0; i<params.size(); i++){ preparedStatement.setObject(i + 1, params.get(i)); } } updateSize = preparedStatement.executeUpdate(); }catch (Exception e) { e.printStackTrace(); log.info("mdb文件更新sql出錯。Exception=" + e); throw new RuntimeException(e); }finally{ close(null, preparedStatement, connection); } log.info("mdb更新數量,updateSize=" + updateSize + "。sql="+sql); return updateSize; } /** * mdb文件sql執行(如新增、刪除字段),成功返回true * @param absoluteFilePath mdb文件絕對路徑 * @param sql 查詢的sql語句 * @return */ public static boolean execute(String absoluteFilePath, String sql){ log.info("mdb文件絕對路徑,absoluteFilePath=" + absoluteFilePath); log.info("mdb文件sql執行,sql=" + sql); Properties prop = new Properties(); prop.put("charset", "utf-8");//解決中文亂碼(GB2312/GBK) String url = JDBC_URL + absoluteFilePath; Statement statement = null; Connection connection = null; boolean result = false; try{ Class.forName(JDBC_DRIVER); connection = DriverManager.getConnection(url, prop); statement = connection.createStatement(); statement.execute(sql); result = true; log.info("mdb文件執行sql成功。sql=" + sql); }catch (Exception e) { e.printStackTrace(); log.info("mdb文件執行sql出錯。Exception=" + e); throw new RuntimeException(e); }finally{ close(null, statement, connection); } return result; } public static void main(String[] args) { /* String sql = "select * from cu_proj_zxgh_land"; //List<Map<String, Object>> listMap = read("C:/db/test.mdb", sql); List<Row> rowList = read("C:/db/02-地塊划分與指標控制圖.mdb", sql); if(rowList != null && rowList.size() > 0){ System.out.println("=====listMap.size()="+rowList.size()); for (Row row : rowList) { System.out.println(row.toString()); System.out.println(""); } } */ /* //更新數據 String sql = "update t_user set age=199 where id=1"; System.out.println(update("C:/db/test.mdb", sql)); */ //preparedStatement /* String sql = "update t_user set age=?,email=? where id=?"; List<Object> params = new ArrayList<Object>(); params.add(99); params.add("bbb@qq.com"); params.add(1); System.out.println(update("C:/db/test.mdb", sql, params)); */ //增加列 /* String sql = "alter table t_user add column gh_id int"; //String sql = "alter table t_user add column my_id datetime not null default now()"; System.out.println(execute("C:/db/test.mdb", sql)); */ } }
(如果你覺得文章對你有幫助,歡迎捐贈,^_^,謝謝!)
================================
©Copyright 蕃薯耀 2020-01-09
https://www.cnblogs.com/fanshuyao/