Skip to content

Latest commit

 

History

History
169 lines (113 loc) · 7.12 KB

File metadata and controls

169 lines (113 loc) · 7.12 KB
Maven Central Version Maven Central Last Update GitHub Stars
GitHub Actions Workflow Status CodeQL Workflow Status Javadoc APIdia

UCanAccess

The modern bridge between Java and Microsoft Access

UCanAccess is a open-source pure-Java JDBC driver that gives you seamless access to Microsoft Access databases (.mdb, .accdb) without needing any native Windows libraries - R.I.P. OdbcJdbcBridge 🪦.

New to UCanAccess? Check out the introduction guide on Foojay.io: UCanAccess – Java MS Access JDBC Guide

UCanAccess Logo

✨ Key Features

  • Pure Java Power: Zero native dependencies. Runs anywhere Java 11+ is supported.

  • Drop-in Replacement: Fully compatible with previous UCanAccess versions.

  • Modern Core: Built on top of the latest Jackcess 5.1.6 and HSQLDB 2.7.4 for maximum stability and security.

  • Comprehensive SQL Support: Supports SELECT, INSERT, UPDATE, DELETE, and even complex DDL operations like ALTER TABLE.

  • Access-like Logic: Includes built-in Access functions (like IIf, Nz, and financial functions like PMT or PV).

  • Security Conscious: Regularly updated to be free of known CVEs.

 

🛠 Tech Stack & Requirements

 

📦 Installation

To use UCanAccess in your project, add the following dependency.

Maven (pom.xml)

<dependency>
    <groupId>io.github.spannm</groupId>
    <artifactId>ucanaccess</artifactId>
    <version>5.1.7</version>
</dependency>

Gradle (Groovy / build.gradle)

implementation 'io.github.spannm:ucanaccess:5.1.7'

Gradle (Kotlin DSL / build.gradle.kts)

implementation("io.github.spannm:ucanaccess:5.1.7")

 

🔁 Migrating from net.sf.ucanaccess

Still on the original net.sf.ucanaccess:ucanaccess artifact? That project has had no release since 2020 and no longer receives security or compatibility updates. Switching to this fork is a drop-in, API-compatible change — no code changes required, just update your dependency coordinates:

- <groupId>net.sf.ucanaccess</groupId>
+ <groupId>io.github.spannm</groupId>
  <artifactId>ucanaccess</artifactId>
- <version>5.0.1</version>
+ <version>5.1.7</version>

You get current Jackcess/HSQLDB versions (with their CVE fixes), tested Java 11/17/21 support on Linux and Windows, and active maintenance — with the same JDBC driver class and connection URL you already use.

 

🚦 Quick Start

Connecting to your database is as simple as:

import java.sql.Connection;
import java.sql.DriverManager;

String url = "jdbc:ucanaccess://C:/path/to/your/database.accdb";
try (Connection conn = DriverManager.getConnection(url)) {
    // your code here
}

 

🔗 Linked Tables & Untrusted Databases

If the .accdb/.mdb file you open contains linked tables, UCanAccess automatically opens the linked database files so those tables can be read. Local linked paths are resolved as before, but a linked table pointing to a network/UNC path (e.g. \\server\share\linked.accdb) is rejected by default with an AccessDeniedException — such a path is taken verbatim from the database file, so a database from an untrusted source could otherwise make your JVM reach out to an arbitrary host as soon as the linked table is touched.

If you trust the linked network paths in a given database, opt back in explicitly via the allowRemoteLinks connection property:

String url = "jdbc:ucanaccess://C:/path/to/your/database.accdb;allowRemoteLinks=true";

 

❤️ Why this Fork?

The original project (developed by Marco Amadei and Gord Thompson) was the gold standard for Access connectivity but went quiet in 2020, leaving net.sf.ucanaccess:ucanaccess unmaintained at version 5.0.1. As a long-time contributor and Java enthusiast, I decided to give UCanAccess a new home.

My goal is to keep this essential tool alive, maintain a high test coverage (JUnit 5), and ensure it meets modern Clean Code and SOLID standards. If you maintain a project that still depends on net.sf.ucanaccess, see Migrating from net.sf.ucanaccess above — a PR bumping the dependency is very welcome.

 

🤝 Contributions welcome!

Got a bug to fix or a feature to add?

  1. Check out the Issues
  2. Fork the Repo
  3. Submit a Pull Request

Note: Please ensure your code follows the project's quality standards (Checkstyle, PMD are enforced in the build).

───────────────

⚖️ License

UCanAccess is licensed under the Apache License, Version 2.0.

 

Enjoying UCanAccess? Please leave a 🌟 to support the project!
Your stars help to keep the bridge between Java and Access alive and visible.