使用UCanAccess连接MS Access执行插入操作时遇到newPosition < 0: (-2048 < 0)错误
UCanAccess连接MS Access执行插入操作时遇到newPosition < 0: (-2048 < 0)错误
你尝试用Spring JdbcTemplate通过UCanAccess往MS Access数据库插入数据时遇到了连接异常,先来梳理下问题场景和解决思路:
你的代码场景
插入数据代码
insert = template.update("INSERT INTO tblE125Details (ForeasCode, EYear, ArProtokolou, InvNo, SName, Fname, DOB, sex, IDno, entipo, EKAANo," + "EKAAIssueDate, EKAAExpireDate, PaymentAmount, PaymentCurrency, HospFrom, HospTo, MedClaim, InDate)" + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)","Test", 2025, "Test", "12345", "Smith", "John", "1980-01-01", "M", "ID123", "Type", "EKAA123", "2025-01-01", "2025-12-31", 100.50, "USD", "2025-01-01", "2025-12-31", "MedClaim123", "2025-01-01");
数据源配置
@Bean(name="db3") @ConfigurationProperties(prefix="database.third") public DataSource dataSourceE125export(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("net.ucanaccess.jdbc.UcanaccessDriver"); dataSource.setUrl("jdbc:ucanaccess://C:/Dropbox/Projects/DB2.MDB;openExlcusive=false;ignorecase=trueB"); dataSource.setUsername("user"); dataSource.setPassword("pass"); return dataSource; } @Bean(name = "jdbcImportE125") public JdbcTemplate jdbcTemplate3(@Qualifier("db3") DataSource ds) { return new JdbcTemplate(ds); }
报错信息
2025-03-28 20:02:47.797[0;39m [32m INFO[0;39m [35m40236[0;39m [2m---[0;39m [2m[nio-8091-exec-2][0;39m [36mmlsi.gov.cy.ctr.ImportE125Controller [0;39m [2m:[0;39m DataAccessException [2m2025-03-28 20:02:47.848[0;39m [31mERROR[0;39m [35m40236[0;39m [2m---[0;39m [2m[nio-8091-exec-2][0;39m [36mmlsi.gov.cy.ctr.ImportE125Controller [0;39m [2m:[0;39m DataAccessException occurred org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.4 newPosition < 0: (-2048 < 0) at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) ~[spring-jdbc-5.3.3.jar:5.3.3] ...(省略后续堆栈信息) Caused by: net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.4 newPosition < 0: (-2048 < 0) at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:231) ~[ucanaccess-4.0.4.jar:4.0.4] ...(省略后续堆栈信息)
问题分析与解决方案
这个错误最可能是JDBC URL的拼写错误导致的,你看数据源配置里的URL有两个明显的问题:
openExlcusive拼写错误,正确的参数名是openExclusive(字母顺序为c-l-u-s-i-v-e)- 末尾的
trueB多了个冗余的B,应该是true
第一步:修正JDBC URL
把URL改成正确的格式:
dataSource.setUrl("jdbc:ucanaccess://C:/Dropbox/Projects/DB2.MDB;openExclusive=false;ignorecase=true");
第二步:排查其他可能的问题
如果修正URL后还是报错,可以检查以下几点:
- 数据库文件路径与权限:确认
DB2.MDB确实在指定路径下,并且你的应用程序对该路径有读写权限(Dropbox文件夹可能有同步锁,建议先把文件复制到本地非同步目录测试) - 文件占用情况:确保没有其他程序(比如Microsoft Access客户端)打开了这个MDB文件,否则UCanAccess无法获取连接
- 版本兼容性:你使用的UCanAccess是4.0.4,Spring是5.3.3,尝试升级UCanAccess到最新稳定版,避免版本冲突
- 插入语句验证:确认插入参数的数量、顺序和表中字段完全匹配,也可以打印日志验证每个参数的类型是否符合表字段要求
备注:内容来源于stack exchange,提问作者zinon
相关产品推荐
相关产品推荐

