Mdb文件工具类,UCanAccess使用,Access数据库操作
================================
©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/
Mdb文件工具类,UCanAccess使用,Access数据库操作的更多相关文章
- Microsoft Access数据库操作类(C#)
博文介绍的Microsoft Access数据库操作类是C#语言的,可实现对Microsoft Access数据库的增删改查询等操作.并且该操作类可实现对图片的存储,博文的最后附上如何将Image图片 ...
- C# ACCESS数据库操作类
这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所有记录的数量的时候有多一个参数,这个需要注意一下! usi ...
- 自动扫描FTP文件工具类 ScanFtp.java
package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- 读取Config文件工具类 PropertiesConfig.java
package com.util; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io ...
- Property工具类,Properties文件工具类,PropertiesUtils工具类
Property工具类,Properties文件工具类,PropertiesUtils工具类 >>>>>>>>>>>>>& ...
- Android FileUtil(android文件工具类)
android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...
- Java 实现删除文件工具类
工具代码 package com.wangbo; import java.io.File; /** * 删除目录或文件工具类 * @author wangbo * @date 2017-04-11 1 ...
- HTTP 下载文件工具类
ResponseUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.File; im ...
- Java常用工具类---IP工具类、File文件工具类
package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...
随机推荐
- sourcetree的安装
参考博文: SourceTree安装教程和GitLab配置详解 关于Atlassian无法注册的问题 SourceTree跳过Atlassian账号,免登陆,跳过初始设置 sourcetree跳过注册 ...
- pytesseract 识别率低提升方法
pytesseract 识别率低提升方法 一.跟换识别语言包 下载地址https://github.com/tesseract-ocr/tessdata 二.修改图片的灰度 from PIL impo ...
- springboot 中单机 redis 实现分布式锁
在微服务中经常需要使用分布式锁,来执行一些任务.例如定期删除过期数据,在多个服务中只需要一个去执行即可. 以下说明非严格意义的分布式锁,因为 redis 实现严格意义的分布式锁还是比较复杂的,对于日常 ...
- java学习之IO流(学习之旅,一)
个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...
- 响应式布局之 px、em、 rem
一.写在前面的话 作为一面前端开发者,对 px .em . rem 应该是再熟悉不过了,但大多数小伙伴应该都和我一样仅仅停留在了解的层面,并不是实质性的掌握它们.本文对三者进行了详细的总结和详细说明, ...
- POJ 1195:Mobile phones 二维树状数组
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 16893 Accepted: 7789 De ...
- CSS层级关系 学习笔记
CSS 文档流 格式化上下文 Formatting Context 即初始元素定义的环境 块格式化上下文 Block Formatting Context BFC 行内格式化上下文 ...
- js中const,val,let 的区别
1. const定义的变量不可以修改,而且必须初始化. 2. var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 3. let是块级作用域,函数内部使用let定义后,对函数外部 ...
- HDU_4939 stupid tower defense 2014多校7 多变量型DP
意思是有个塔防游戏,有三种塔,红塔在怪物经过的时候每秒会产生攻击力大小的伤害,绿塔对怪物经过以及经过之后每秒产生攻击力大小的伤害,还有种蓝塔,对怪物进行减速,即怪物从此之后经过一个单位都会减慢c秒 最 ...
- ACM-可乐兑换
题目描述:可乐兑换 小明的班级参加一个活动,每人要喝过一瓶可乐,恰逢可乐促销,3瓶可乐空瓶可以换一瓶可乐,小明想节约钱,所以想买尽可能少的可乐让每人至少喝过一瓶可乐,问买至少多少瓶可乐够n人至少每人喝 ...