本地可运行但无法连服务器:UCAExc:::5.0.1非法字符错误求助
解决UCanAccess连接远程Access数据库的路径错误问题
错误原因
你遇到的Illegal char <:> at index 15错误,核心问题是远程数据库的路径格式完全错误:
- 访问Windows远程共享文件不能用
192.168.13.30/C:/...这种格式,UCanAccess解析时会将路径中的冒号判定为非法字符; - 你的路径仅指向桌面目录,未指定具体的
.mdb文件名,UCanAccess无法定位目标数据库文件。
正确解决方案
1. 确认远程共享设置
先确保远程机器(192.168.13.30)的目标文件夹或盘符已开启共享:
- 若直接访问C盘,Windows默认有隐藏共享
C$(需管理员权限访问); - 也可单独共享
Desktop文件夹,配置好访问权限(允许运行Java程序的用户读取/写入)。
2. 使用标准UNC路径格式
远程共享文件的标准格式为\\服务器IP\共享名\文件路径,在Java代码中需将反斜杠转义为双反斜杠,或直接用正斜杠替代:
- 转义反斜杠写法:
\\\\192.168.13.30\\C$\\Users\\Debabrata\\Desktop\\你的数据库名.mdb - 正斜杠写法:
//192.168.13.30/C$/Users/Debabrata/Desktop/你的数据库名.mdb
3. 修改后的代码示例
替换原代码中的msAccDB变量,补充具体的数据库文件名,并根据远程共享权限填写用户名密码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Main { public static void main(String[] args) { // 替换为实际的mdb文件名,比如test.mdb String msAccDB= "//192.168.13.30/C$/Users/Debabrata/Desktop/test.mdb;memory=false"; String url = "jdbc:ucanaccess://" + msAccDB; Connection conn = null; // 远程共享需要权限时,填入远程机器的用户名和密码 String user = "远程机器用户名"; String password = "远程机器密码"; try { Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); conn = DriverManager.getConnection(url, user, password); System.out.println("Connection established successfully."); } catch (ClassNotFoundException e) { System.out.println("UCanAccess driver not found: " + e.getMessage()); } catch (SQLException e) { System.out.println("Connection failed: " + e.getMessage()); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { System.out.println("Error closing connection: " + e.getMessage()); } } } }
额外注意事项
- 确保运行Java程序的主机能ping通192.168.13.30,且防火墙未阻止SMB共享端口(如445端口);
- 若远程共享未设置权限,可尝试空用户名密码,但不建议在生产环境使用。
内容的提问来源于stack exchange,提问作者Subhajit
相关产品推荐
相关产品推荐

