Java UCanAccess-如何在MS Access中创建VARCHAR外键?获得;“关系中缺少列”;错误

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

我正在尝试使用UCanAccess JDBC驱动程序在MS Access中的两个表之间创建主/详细关系

两个表都已创建,但外键关系失败,“关系中缺少列(Rel=master_table[[]]->detail_table[[]])

以下是我的测试代码:

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是一个非常好的工具,如果我能让它发挥作用,我非常愿意捐赠并使用它。