Java UCanAccess-如何在MS Access中创建VARCHAR外键?获得;“关系中缺少列”;错误
我正在尝试使用UCanAccess JDBC驱动程序在MS Access中的两个表之间创建主/详细关系 两个表都已创建,但外键关系失败,“关系中缺少列(Rel=master_table[[]]->detail_table[[]])” 以下是我的测试代码:Java UCanAccess-如何在MS Access中创建VARCHAR外键?获得;“关系中缺少列”;错误,java,sql,ms-access,jdbc,ucanaccess,Java,Sql,Ms Access,Jdbc,Ucanaccess,我正在尝试使用UCanAccess JDBC驱动程序在MS Access中的两个表之间创建主/详细关系 两个表都已创建,但外键关系失败,“关系中缺少列(Rel=master_table[[]]->detail_table[[]])” 以下是我的测试代码: try { Connection connection = DriverManager.getConnection(dbURL); Statement statement = connection.createStateme
try {
Connection connection = DriverManager.getConnection(dbURL);
Statement statement = connection.createStatement();
statement.execute("CREATE TABLE master_table ("
+ "masterPK VARCHAR(32) PRIMARY KEY NOT NULL"
+ ");");
statement.execute("CREATE TABLE detail_table ("
+ "detailPK LONG PRIMARY KEY NOT NULL,"
+ "detailFK VARCHAR(32) REFERENCES master_table(masterPK) NOT NULL"
+ ");");
} catch (SQLException ex) {
ex.getMessage();
}
当我在Access内部发布这些语句时,它们工作正常,但不是通过UCanAccess。我做错了什么
我试过使用不同的字母和数字数据类型,有大小规格和没有大小规格,但都没有用
我也饶有兴趣地阅读,并在将外键改为LONG后尝试了这个示例。那也不行
我正在使用UCanAccess 4.0.4、MS Access(2007-2016文件格式)、OpenJDK 13+33和OpenJFX 13.0.1,运行在Windows 10上的Apache NetBeans 11.1中
如果有帮助,SQLException消息如下所示:
java.lang.IllegalArgumentException:中缺少列
关系(Rel=master_table[[]]->detail_table[[]])位于
com.healthmarketscience.jackcess.impl.RelationshipCreator.validate(RelationshipCreator.java:183)
在
com.healthmarketscience.jackcess.impl.RelationshipCreator.createRelationship(RelationshipCreator.java:98)
在
com.healthmarketscience.jackcess.relationshippuilder.toRelationship(relationshippuilder.java:192)
在
net.ucanaccess.converters.Persist2Jet.createForeignKey(Persist2Jet.java:807)
在
net.ucanaccess.converters.Persist2Jet.createForeignKeys(Persist2Jet.java:761)
在
net.ucanaccess.converters.Persist2Jet.createTable(Persist2Jet.java:481)
在
net.ucanaccess.commands.CreateTableCommand.persist(CreateTableCommand.java:100)
在
net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:323)
在
net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:205)
在
net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:273)
在net.ucanaccess.jdbc.Execute.Execute(Execute.java:44)中
net.ucanaccess.jdbc.UcanaccessStatement.execute(UcanaccessStatement.java:157)
在
replicatesqliteschema.replicatesqliteschema.createContent(replicatesqliteschema.java:190)
在
replicatesqliteschema.replicatesqliteschema.start(replicatesqliteschema.java:271)
在
javafx.graphics/com.sun.javafx.application.LaunchImpl.lambda$launchApplication1$9(LaunchImpl.java:846)
在
javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
在
javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
在
java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
在
javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
在
javafx.graphics/com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:96)
在
javafx.graphics/com.sun.glass.ui.win.WinApplication.\u runLoop(本机)
方法)在
javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
位于java.base/java.lang.Thread.run(Thread.java:830)
我无法使用console.bat重现您的问题。结果。请尝试在您的机器上执行相同的console.bat测试,看看它是否适合您。感谢您的快速回复,Gord。我在控制台中做了更多的测试——使用Java8 1.8.0ç、一个2007 accdb和一个老式MDB——在CREATETABLE语句中仍然没有创建关系。但是,它与ALTER TABLE一起工作。。。添加约束。另外,我刚刚启动了旧的Windows 7 Pro 64位PC。它与OpenJDK11和2007 accdb==>配合使用效果很好。它一定是我的Win10配置中的某个东西。我会调查的。有什么线索可以找吗?谢谢你的帮助。非常感谢。UCanAccess是一个非常好的工具,如果我能让它发挥作用,我非常愿意捐赠并使用它。