You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码设置SchemaCrawler的command参数及全配置示例?

完整SchemaCrawler程序化配置示例

下面是覆盖常见命令行参数的完整代码实现,包含你提到的command参数配置、LimitOption/LoadOptions设置,以及DiagramOptionsBuilder的--portable=names和Graphviz属性配置:

import schemacrawler.schema.SchemaCrawlerOptions;
import schemacrawler.schema.TableTypes;
import schemacrawler.tools.diagram.DiagramOptions;
import schemacrawler.tools.diagram.DiagramOptionsBuilder;
import schemacrawler.tools.executable.SchemaCrawlerCommand;
import schemacrawler.tools.options.LimitOptions;
import schemacrawler.tools.options.LimitOptionsBuilder;
import schemacrawler.tools.options.LoadOptions;
import schemacrawler.tools.options.LoadOptionsBuilder;
import schemacrawler.tools.options.OutputOptions;
import schemacrawler.tools.options.OutputOptionsBuilder;
import schemacrawler.tools.utility.SchemaCrawlerUtility;

import java.sql.Connection;
import java.sql.DriverManager;
import java.nio.file.Paths;
import java.util.Collections;

public class SchemaCrawlerFullConfigExample {
    public static void main(String[] args) throws Exception {
        // 替换为你的数据库连接信息
        final String dbUrl = "jdbc:postgresql://localhost:5432/your_db";
        final String dbUser = "your_username";
        final String dbPassword = "your_password";
        
        try (Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword)) {

            // 1. 配置LimitOptions(对应命令行--schema、--tables、--table-types等参数)
            final LimitOptions limitOptions = LimitOptionsBuilder.builder()
                    .includeSchemas("public") // 对应--schema=public
                    .tableTypes(Collections.singletonList(TableTypes.TABLE)) // 对应--table-types=TABLE
                    .includeTables("employees|departments") // 对应--tables=employees|departments
                    .build();

            // 2. 配置LoadOptions(对应命令行--load-columns、--load-foreign-keys等参数)
            final LoadOptions loadOptions = LoadOptionsBuilder.builder()
                    .loadColumns(true)
                    .loadIndexes(true)
                    .loadPrimaryKeys(true)
                    .loadForeignKeys(true)
                    .build();

            // 3. 配置核心SchemaCrawlerOptions,设置command参数
            final SchemaCrawlerOptions schemaCrawlerOptions = SchemaCrawlerOptions.builder()
                    .limitOptions(limitOptions)
                    .loadOptions(loadOptions)
                    // 对应命令行的顶级命令,可选值:DIAGRAM/SCHEMA/DATA等
                    .command(SchemaCrawlerCommand.DIAGRAM)
                    .build();

            // 4. 配置DiagramOptions(对应命令行--portable、--graphviz-*等参数)
            final DiagramOptions diagramOptions = DiagramOptionsBuilder.builder()
                    .portableNames() // 对应--portable=names
                    .graphvizFormat(DiagramOptions.GraphvizFormat.png) // 对应--output-format=png
                    .graphvizProperty("graph.fontname", "Arial") // 对应--graphviz-property=graph.fontname=Arial
                    .graphvizProperty("node.fontname", "Arial")
                    .graphvizProperty("edge.fontname", "Arial")
                    .showColumnNames(true) // 对应--show-column-names
                    .showPrimaryKeys(true) // 对应--show-primary-keys
                    .showForeignKeys(true) // 对应--show-foreign-keys
                    .build();

            // 5. 配置输出选项(对应命令行--output-file参数)
            final OutputOptions outputOptions = OutputOptionsBuilder.builder()
                    .outputFormat(diagramOptions.getGraphvizFormat().getFormat())
                    .outputFile(Paths.get("database-diagram.png"))
                    .build();

            // 6. 执行SchemaCrawler命令
            SchemaCrawlerUtility.execute(connection, schemaCrawlerOptions, diagramOptions, outputOptions);
        }
    }
}

关键参数对应说明

  • Command参数:通过SchemaCrawlerOptions.builder().command(SchemaCrawlerCommand.XXX)设置,枚举值直接对应命令行的顶级命令:
    • SchemaCrawlerCommand.DIAGRAM → 命令行diagram命令(生成数据库图)
    • SchemaCrawlerCommand.SCHEMA → 命令行schema命令(生成文本格式Schema信息)
    • SchemaCrawlerCommand.DATA → 命令行data命令(导出表数据)
  • Portable命名:DiagramOptionsBuilder.portableNames()直接等价于--portable=names参数,生成跨数据库兼容的对象名称
  • 过滤与加载配置:LimitOptionsBuilder和LoadOptionsBuilder的方法一一对应命令行的--limit、--load-*等参数
  • Graphviz属性:graphvizProperty方法直接对应--graphviz-property参数,可自定义图的字体、布局等细节

依赖说明(Maven)

确保项目包含SchemaCrawler核心及对应数据库驱动依赖(以PostgreSQL为例):

<dependency>
    <groupId>us.fatehi</groupId>
    <artifactId>schemacrawler</artifactId>
    <version>16.21.1</version> <!-- 使用最新稳定版本 -->
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.6.0</version>
</dependency>

内容的提问来源于stack exchange,提问作者SilverPhoenix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 15:17:33