Java操作Accdb数据文件

JAVA连接Access数据库

相关依赖

使用ucanaccess驱动连接access数据库,一下是相关依赖(由于网络原因,我是直接将jar下载至本地直接加载,也可直接从maven中心库拉取)

 		<dependency>
            <groupId>net.sf.sccloud</groupId>
            <artifactId>ucanaccess</artifactId>
            <version>5.0.1</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/ucanaccess-5.0.1.jar</systemPath>
        </dependency>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.healthmarketscience.jackcess<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>jackcess<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>3.0.1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>scope</span><span class="token punctuation">&gt;</span></span>system<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>scope</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>systemPath</span><span class="token punctuation">&gt;</span></span>${project.basedir}/lib/jackcess-3.0.1.jar<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>systemPath</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.healthmarketscience.jackcess<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>jackcess-encrypt<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>3.0.0<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>scope</span><span class="token punctuation">&gt;</span></span>system<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>scope</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>systemPath</span><span class="token punctuation">&gt;</span></span>${project.basedir}/lib/jackcess-encrypt-3.0.0.jar<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>systemPath</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.bouncycastle<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>bcprov-jdk15on<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.68<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

配置

spring.datasource.driver-class-name=net.ucanaccess.jdbc.UcanaccessDriver
spring.datasource.url=jdbc:ucanaccess://D:/test.accdb;charset=utf-8
spring.datasource.password=xxxxxxxx
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.pool-size=30

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

遇到问题:

连接无密码的access数据库可以直接访问,但是一旦数据库设置了密码就报错

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::5.0.1 Decoding not supported. Please choose a CodecProvider which supports reading the current database encoding.

提示字符集问题

解决办法

  1. 需要一个CryptCodecOpener(一个加密解密的扩展库,用于打开受加密保护的 Microsoft Access 数据库),项目示例地址

  2. 自定义一个相关实现类


package com.example.demo;

import java.io.File;
import java.io.IOException;

import com.healthmarketscience.jackcess.CryptCodecProvider;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;

import net.ucanaccess.jdbc.JackcessOpenerInterface;

public class CryptCodecOpener implements JackcessOpenerInterface {
public Database open(File fl, String pwd) throws IOException {
DatabaseBuilder dbd = new DatabaseBuilder(fl);
dbd.setAutoSync(false);
dbd.setCodecProvider(new CryptCodecProvider(pwd));
dbd.setReadOnly(false);
return dbd.open();
}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  1. 修改配置
spring.datasource.driver-class-name = net.ucanaccess.jdbc.UcanaccessDriver
spring.datasource.url = jdbc:ucanaccess://D:/test.accdb;openExclusive=false;ignoreCase;jackcessOpener=com.example.demo.CryptCodecOpener
spring.datasource.password = xxx

 
 
  • 1
  • 2
  • 3
  1. 完美解决!

参考文献

https://stackoverflow.com/questions/59468649/ucaexc3-0-7-decoding-not-supported-please-choose-a-codecprovider-which-suppo

文章知识点与官方知识档案匹配,可进一步学习相关知识
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Apache Spark是一个强大的大数据处理框架,它可以用于读取和处理多种数据源,包括ACCDB文件。为了使用Spark读取ACCDB文件,我们需要使用特定的库和驱动程序,如HXTT Access JDBC驱动程序。以下是使用Spark读取ACCDB文件的步骤: 1. 下载HXTT Access JDBC驱动程序,将其添加到Spark的CLASSPATH中。 2. 在Spark中创建一个JDBC连接,指定ACCDB文件的路径和驱动程序的类名。 3. 使用Spark SQL或DataFrame API执行查询并处理结果。 下面是一个使用Spark SQL读取ACCDB文件的示例代码: ```scala import org.apache.spark.sql.SparkSession object ReadAccessDB { def main(args: Array[String]) { val spark = SparkSession.builder() .appName("Read Access Database") .master("local[*]") .getOrCreate() val url = "jdbc:access:////path/to/access/database.accdb" val driver = "com.hxtt.sql.access.AccessDriver" val user = "" val password = "" val df = spark.read.format("jdbc") .option("url", url) .option("driver", driver) .option("dbtable", "tableName") .option("user", user) .option("password", password) .load() df.show() spark.stop() } } ``` 在上面的代码中,我们使用SparkSession创建一个Spark应用程序,并指定JDBC连接的URL、驱动程序、用户名和密码。然后,我们使用`spark.read.format("jdbc")`方法加载ACCDB文件中的数据,并将数据存储在DataFrame中。最后,我们使用`df.show()`方法显示结果。 注意:在使用HXTT Access JDBC驱动程序时,需要将驱动程序的类名指定为`com.hxtt.sql.access.AccessDriver`。此外,还需要在JDBC连接的URL中使用`jdbc:access://`前缀,而不是常规的`jdbc:odbc://`前缀。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值