You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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有两个明显的问题:

  1. openExlcusive拼写错误,正确的参数名是openExclusive(字母顺序为c-l-u-s-i-v-e)
  2. 末尾的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:12:58