Ucanaccess
Open-source pure Java JDBC driver for Microsoft Access databases. Allows Java developers and client programs (e.g. OpenOffice, LibreOffice, SQuirreL) to read and write various versions of Access databases.
Install / Use
/learn @spannm/UcanaccessREADME
UCanAccess is a high-performance, open-source Java JDBC driver that gives you seamless access to Microsoft Access databases (.mdb and .accdb) without needing any native Windows libraries (R-I-P OdbcJdbcBridge 🪦).
Whether you are building a modern Spring Boot application or using classic tools like LibreOffice or SQuirreL SQL, UCanAccess provides a reliable, pure-Java way to read and write your data.
<div align="center"> ──────────────────── </div>✨ 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.2 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 likePMTorPV). -
Security Conscious: Regularly updated to be free of known CVEs.
🛠 Tech Stack & Requirements
-
Java Version: 11 or higher (LTS versions like Java 17 and 21 are fully supported and tested).
-
Build Tool: Maven
-
Main Dependencies:
📦 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.5</version>
</dependency>
Gradle (Groovy / build.gradle)
implementation 'io.github.spannm:ucanaccess:5.1.5'
Gradle (Kotlin DSL / build.gradle.kts)
implementation("io.github.spannm:ucanaccess:5.1.5")
<p style="height: 20px;"> </p>
🚦 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
}
<p style="height: 20px;"> </p>
❤️ 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. 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.
<p style="height: 20px;"> </p>🤝 Contributions welcome!
Got a bug to fix or a feature to add?
- Check out the Issues
- Fork the Repo
- Submit a Pull Request
Note: Please ensure your code follows the project's quality standards (Checkstyle, PMD are enforced in the build).
<div align="center"> ─────────────── </div>⚖️ License
UCanAccess is licensed under the Apache License, Version 2.0.
<p style="height: 40px;"> </p> <div align="center"> <table style="border-collapse: collapse;"> <tr> <td style="padding: 40px; border: 2px solid #3a82c2;"> <strong>Enjoying UCanAccess? Please leave a 🌟 to support the project!</strong><br> <small>Your stars help to keep the bridge between Java and Access alive and visible.</small> </td> </tr> </table> </div>Related Skills
oracle
341.0kBest practices for using the oracle CLI (prompt + file bundling, engines, sessions, and file attachment patterns).
prose
341.0kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
Command Development
84.4kThis skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
Plugin Structure
84.4kThis skill should be used when the user asks to "create a plugin", "scaffold a plugin", "understand plugin structure", "organize plugin components", "set up plugin.json", "use ${CLAUDE_PLUGIN_ROOT}", "add commands/agents/skills/hooks", "configure auto-discovery", or needs guidance on plugin directory layout, manifest configuration, component organization, file naming conventions, or Claude Code plugin architecture best practices.
