首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UCanAccess -使用keepMirror后无法重新连接到Access数据库

UCanAccess -使用keepMirror后无法重新连接到Access数据库
EN

Stack Overflow用户
提问于 2016-08-27 10:15:11
回答 2查看 1.3K关注 0票数 1

我正在尝试使用UCanAccess读取Access数据库。

代码正在工作,但由于数据库很大,速度非常慢。由于数据库很少更改,所以我尝试在

Slow initial connection to MS access database;。

connection = DriverManager.getConnection(UcanaccessDriver.URL_PREFIX + databaseFile + ";keepMirror=/some/dir/test/resources/db-mirror/mirror");

在第一次运行时,应用程序完美地工作,并在上面的目录中创建镜像文件。然而,在随后的运行中,我得到了以下异常:

线程"main“中的异常/some/dir/test/resources/db-mirror/mirror-783471167 : net.ucanaccess.jdbc.UcanaccessSQLException: 3.0.6脚本文件行中的错误: 289 de.gdfsuezenergie.stromnev.Main.setUp(Main.java:374)语句中的一组列已经存在唯一的约束,在de.gdfsuezenergie.stromnev.Main.setUp(Main.java:374)的de.gdfsuezenergie.stromnev.Main.setUp(Main.java:374)上,在DELETE级联上创建缓存表)在de.gdfsuezenergie.stromnev.Main.main(Main.java:165) at de.gdfsuezenergie.stromnev.MainTest.main(MainTest.java:9) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.intellij.rt.execution.application由:UCAExc:3.0.6脚本文件行中的错误: 289 /some/dir/test/resources/db-mirror/mirror-783471167引起的.AppMain.main(AppMain.java:144)一个唯一的约束已经存在于语句中的一组列上,在UPDATE级联上创建DELETE缓存表)在java.sql.DriverManager.getConnection(DriverManager.java:664)的java.sql.DriverManager.getConnection(DriverManager.java:664)java.sql.DriverManager.getConnection(DriverManager.java:270) at de.gdfsuezenergie.stromnev.enet.ENETConnector.createConnection(ENETConnector.java:86) at de.gdfsuezenergie.stromnev.enet.ENETConnector.init(ENETConnector.java:57) .8更多的原因是: java.sql.SQLException: error in script文件行: 289 /some/dir/test/resources/db-mirror/mirror-783471167语句中的一组列已经存在唯一的约束,在DELETE级联上创建缓存表更新级联)在org.hsqldb.jdbc.JDBCUtil.sqlException(未知源)在org.hsqldb.jdbc.JDBCUtil.sqlException(未知源)在org.hsqldb.jdbc.JDBCConnection(未知源)在java.sql.DriverManager.getConnection(DriverManager.java:247) (未知源)在org.hsqldb.jdbc.JDBCDriver.connect(未知源)在java.sql.DriverManager.getConnection(DriverManager.java:247)在net.ucanaccess.jdbc.DBReference.getHSQLDBConnection(DBReference.java:440) at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:231) . 12上,由: org.hsqldb.HsqlException: error在脚本文件行: 289 /some/dir/test/resources/db-mirror/mirror-783471167引起的,在org.hsqldb.error.Error.error(未知源)语句中的一组列上已经存在一个唯一的约束:在org.hsqldb.error.Error.error(未知源)上,在删除级联上创建缓存表。在org.hsqldb.scriptio.ScriptReaderText.readDDL(Unknown源)在org.hsqldb.scriptio.ScriptReaderBase.readAll(Unknown源)在org.hsqldb.persist.Log.processScript(未知源)在org.hsqldb.persist.Log.open(未知源)在org.hsqldb.persist.Logger.open(未知源)在org.hsqldb.Database.reopen(未知源)在org.hsqldb.Database.open(未知源)在org.hsqldb.DatabaseManager.getDatabase(未知源) at org.hsqldb.DatabaseManager.newSession(未知源). 19多个原因是: org.hsqldb.HsqlException:在org.hsqldb.error.Error.error(未知源)、org.hsqldb.StatementSchema.getResult(未知源)、org.hsqldb.StatementSchema.execute(未知源)处的列集上已经存在唯一约束。( org.hsqldb.Session.executeCompiledStatement(Unknown来源).多28

因此,我理解这违反了对这个缓存表的一些约束,我不理解的是它为什么要运行这个脚本。我认为创建镜像的全部意义是我不需要重新应用任何脚本?

有人知道如何正确地照镜子吗?

注意:为了简洁起见,=>我跳过了表定义。

EN

Stack Overflow用户

回答已采纳

发布于 2016-09-26 12:15:01

当Access数据库中的表具有为给定列定义的多个唯一索引(例如,主键索引(Primary=Yes,Unique=Yes)和另一个单独的唯一索引(Primary=No,Unique=Yes) )时,就会发生此问题。

Access本身对此没有任何问题,但是HSQLDB ( UCanAccess用于其后台数据库)不允许对一组列进行多个唯一约束。

最好的解决方案是在Access中打开.accdb或.mdb数据库,并删除冗余的非主唯一索引。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39179960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档