首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SchemaCrawler Java检索检查列约束

SchemaCrawler Java检索检查列约束
EN

Stack Overflow用户
提问于 2020-08-10 19:18:06
回答 1查看 122关注 0票数 0

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

  1. 包括与其选择的DB驱动程序相对应的.jar,如schemacrawler-postgresql方格
  2. 将详细信息级别设置为detailed (或更高),如下所示:
代码语言:javascript
复制
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()方法。

我已经包含了PostgreSQL、SQLite、MySQL的PostgreSQL文件,但我只获得了PostgreSQL的约束,而对于SQLite和MySQL,结果都是空的(不仅有检查约束,而且也没有空约束,但也没有空约束;可以通过检查列是否可以直接为空,而对于check约束没有这样的API )来检索这些信息。还有什么额外的步骤我还没有考虑过吗?包括.jar for MySQL似乎有助于解决上述问题。

我的依赖关系如下:

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-11 21:21:44

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

Sualeh Fatehi,SchemaCrawler

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63346650

复制
相关文章

相似问题

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