
UCanAccess 不支持直接使用本地文件路径语法访问远程 MDB 文件;必须采用合法的 Windows UNC 路径格式(如 \servershareile.mdb),并确保共享权限、驱动映射与文件扩展名完整,否则将抛出 “Illegal char ” 等解析异常。
ucanaccess 不支持直接使用本地文件路径语法访问远程 mdb 文件;必须采用合法的 windows unc 路径格式(如 \servershareile.mdb),并确保共享权限、驱动映射与文件扩展名完整,否则将抛出 “illegal char <:>” 等解析异常。
UCanAccess 是一个纯 Java 的 JDBC 驱动,用于读写 Microsoft Access(.mdb/.accdb)数据库,但它不支持网络协议(如 SMB/FTP)直连,而是依赖底层 java.io.File 解析数据库路径。这意味着:所有路径最终必须能被 File 构造函数合法识别——而 Java 的 File 明确支持 Windows UNC 路径(以 \ 开头),但拒绝混合使用正斜杠 / 与 Windows 盘符冒号 : 的非法组合(如 "192.168.13.30/C:/..."),这正是报错 Illegal char <:> at index 15 的根本原因。
✅ 正确做法是:将远程路径严格转换为标准 UNC 格式,并显式指定 .mdb 或 .accdb 文件名:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
import net.ucanaccess.jdbc.UcanaccessDriver;
public class Main {
public static void main(String[] args) {
// ✅ 正确:双反斜杠开头的 UNC 路径 + 完整文件名 + 可选参数
final String msAccDB = "\\192.168.13.30\C$\Users\Debabrata\Desktop\example.mdb;memory=false";
final String url = UcanaccessDriver.URL_PREFIX + msAccDB;
try (Connection conn = DriverManager.getConnection(url, "", "")) {
System.out.println("Connection established successfully.");
} catch (SQLException e) {
System.err.println("Connection failed: " + e.getMessage());
}
}
}⚠️ 关键注意事项:
- UNC 路径必须以 \\ 开头(Java 字符串中需写为 "\\server\share\file.mdb"),不可用 / 替代 ;
- C$ 是 Windows 默认管理共享(需确保目标机器已启用并授予当前用户读取权限);若已创建自定义共享(如 DesktopShare),则应使用 \\192.168.13.30\DesktopShare\...;
- 路径末尾必须包含具体数据库文件名(如 example.mdb),不能只指向文件夹;
- 服务端防火墙需放行 SMB 端口(TCP 445),且客户端具有访问该共享的 Windows 凭据(UCanAccess 本身不处理身份认证,依赖系统级网络凭据);
- 若使用非默认端口或需显式认证,建议先在 Windows 资源管理器中手动测试 \192.168.13.30C$ 是否可访问,再集成到代码中。
? 补充建议:生产环境应避免直接暴露 C$ 共享,推荐新建专用只读共享(如 accessdb),并配置 NTFS 权限限制访问范围,兼顾安全与可维护性。

















