0

根据这个问题及其评论,为了获得约束(我对检查约束特别感兴趣),必须执行以下操作:

  1. 包括.jar与他们选择的数据库驱动程序相对应的一个,例如schemacrawler-postgresqlschemacrawler-sqlite

  2. 将详细级别设置为detailed(或更高),如下所示:

val optionsBuilder = SchemaCrawlerOptionsBuilder.builder()
    .withLoadOptions(LoadOptionsBuilder.builder()
        .withSchemaInfoLevel(SchemaInfoLevelBuilder.detailed())
        .toOptions()
)


val options = optionsBuilder.toOptions()
val catalog = SchemaCrawlerUtility.getCatalog(dataSource.get(), options)
  1. 使用Table.getTableConstraints()方法。

我已经包含.jar了 PostgreSQL、SQLite、MySQL 的文件,但我只得到了 PostgreSQL 的约束,而 SQLite 和 MySQL 的结果都是空的(不仅有检查约束,也没有空约束,但没有它们的迹象要么;可以通过检查列是否可以直接为空来检索此信息,但没有用于检查约束的此类 API)。有没有我没有考虑过的其他步骤?包括.jarfor MySQL 似乎有助于解决上面链接的问题。

我的依赖项如下:

implementation("us.fatehi:schemacrawler:16.9.3")
implementation("us.fatehi:schemacrawler-mysql:16.9.3")
implementation("us.fatehi:schemacrawler-sqlite:16.9.3")
implementation("us.fatehi:schemacrawler-postgresql:16.9.3")
4

1 回答 1

1

我认为你做的一切都是正确的。SchemaCrawler从 JDBC 驱动程序提供的内容以及数据库的数据字典(或INFORMATION_SCHEMA视图)中获取信息。SchemaCrawler不会推断任何元数据。因此,在您的情况下,如果 MySQL JDBC 驱动程序和 MySQLINFORMATION_SCHEMA都没有报告约束,SchemaCrawler 将不会检索它们。在这种情况下,如果要查找NULL约束,最好的办法是遍历元数据并查找不可为空的列。您可以构建一个实用程序方法来执行此操作,或为此实用程序提交SchemaCrawler增强请求。如果 JDBC 驱动程序和数据字典视图都没有报告检查约束,我对如何获取检查约束没有很好的建议。

Sualeh Fatehi,SchemaCrawler

于 2020-08-11T21:21:44.153 回答