我正在尝试使用UCanAccess读取Access数据库。
代码正在运行,但由于数据库很大,速度非常慢。由于数据库很少更改,我尝试使用
中的keepMirror
建议
Slow initial connection to MS access database;
connection = DriverManager.getConnection(UcanaccessDriver.URL_PREFIX + databaseFile + ";keepMirror=/some/dir/test/resources/db-mirror/mirror");
首次运行时,应用程序可以正常运行,并在上面的目录中创建镜像文件。但是,在后续运行中,我得到以下异常:
线程“main”中的异常java.lang.RuntimeException: net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.6错误 脚本文件行:289 / some / dir / test / resources / db-mirror / mirror-783471167一个独特的 约束已存在于语句[CREATE中]的列集上 CACHED TABLE< TABLE DEF> ON DELATE CASCADE ON UPDATE CASCADE)] at de.gdfsuezenergie.stromnev.enet.ENETConnector.init(ENETConnector.java:69) 在de.gdfsuezenergie.stromnev.Main.setUp(Main.java:374)at de.gdfsuezenergie.stromnev.Main.main(Main.java:165)at de.gdfsuezenergie.stromnev.MainTest.main(MainTest.java:9)at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:483)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 引起:net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.6 脚本文件行中的错误:289 / some / dir / test / resources / db-mirror / mirror-783471167一个独特的 约束已存在于语句[CREATE中]的列集上 CACHED TABLE< TABLE DEF> ON DELATE CASCADE ON UPDATE CASCADE)] at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:264) 在java.sql.DriverManager.getConnection(DriverManager.java:664)at java.sql.DriverManager.getConnection(DriverManager.java:270)at de.gdfsuezenergie.stromnev.enet.ENETConnector.createConnection(ENETConnector.java:86) 在 de.gdfsuezenergie.stromnev.enet.ENETConnector.init(ENETConnector.java:57) ... 8更多引起:java.sql.SQLException:脚本文件中的错误 line:289 / some / dir / test / resources / db-mirror / mirror-783471167一个独特的 约束已存在于语句[CREATE中]的列集上 CACHED TABLE< TABLE DEF> ON DELATE CASCADE ON UPDATE CASCADE)] at org.hsqldb.jdbc.JDBCUtil.sqlException(未知来源)at org.hsqldb.jdbc.JDBCUtil.sqlException(未知来源)at org.hsqldb.jdbc.JDBCConnection。(未知来源)at org.hsqldb.jdbc.JDBCDriver.getConnection(未知来源)at org.hsqldb.jdbc.JDBCDriver.connect(未知来源)at java.sql.DriverManager.getConnection(DriverManager.java:664)at java.sql.DriverManager.getConnection(DriverManager.java:247)at net.ucanaccess.jdbc.DBReference.getHSQLDBConnection(DBReference.java:440) 在 net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:231) ... 12更多引起:org.hsqldb.HsqlException:脚本文件中的错误 line:289 / some / dir / test / resources / db-mirror / mirror-783471167一个独特的 约束已存在于语句[CREATE中]的列集上 CACHED TABLE< TABLE DEF> ON DELATE CASCADE ON UPDATE CASCADE)] at org.hsqldb.error.Error.error(未知来源)at org.hsqldb.scriptio.ScriptReaderText.readDDL(未知来源)at org.hsqldb.scriptio.ScriptReaderBase.readAll(未知来源)at org.hsqldb.persist.Log.processScript(未知来源)at org.hsqldb.persist.Log.open(未知来源)at org.hsqldb.persist.Logger.open(未知来源)at org.hsqldb.Database.reopen(未知来源)at org.hsqldb.Database.open(未知来源)at org.hsqldb.DatabaseManager.getDatabase(未知来源)at org.hsqldb.DatabaseManager.newSession(未知来源)......还有19个 引起:org.hsqldb.HsqlException:已经是UNIQUE约束 存在于org.hsqldb.error.Error.error的列集上(未知 来自)org.hsqldb.error.Error.error(未知来源)at org.hsqldb.ParserTable.addTableConstraintDefinitions(未知来源) 在org.hsqldb.StatementSchema.getResult(未知来源)at org.hsqldb.StatementSchema.execute(未知来源)at org.hsqldb.Session.executeCompiledStatement(Unknown Source)... 28 更
据我所知,这违反了对这个缓存表的一些约束,我不明白为什么它运行这个脚本。我认为创建镜像的重点是我不需要重新应用任何脚本?
有人知道如何正确阅读镜子吗?
注意:< TABLE DEF> =>为简洁起见,我跳过了表定义。
答案 0 :(得分:0)
我设法让它发挥作用,但它有点hacky。基本上,通过从镜像脚本中删除Unique Constraints,它最终成功完成了。可悲的是,我不知道数据,所以如果它仍然正确,需要解决,但我相信它是。
感谢大家的指点!非常感谢。
答案 1 :(得分:0)