【问题标题】:Is there a Java API for comparing Database Schemas是否有用于比较数据库模式的 Java API
【发布时间】:2017-03-13 21:42:50
【问题描述】:

我想比较一下

  • 表格
  • 包含数据类型和长度/精度的列。
  • 索引及其列
  • 约束

在两个数据库中的模式是相同的。

有这样的东西吗?也许来自其中一种数据库迁移管理工具?

【问题讨论】:

    标签: java jdbc compare schema rdbms


    【解决方案1】:

    我不知道用于架构比较的高级 API 我使用了 DatabaseMetaData 不难发现差异,例如检索所有表,您可以执行以下操作:

    DatabaseMetaData meta = con.getMetaData();
      ResultSet res = meta.getTables(null, null, null, 
         new String[] {"TABLE"});
      System.out.println("List of tables: "); 
      while (res.next()) {
         System.out.println(
            "   "+res.getString("TABLE_CAT") 
           + ", "+res.getString("TABLE_SCHEM")
           + ", "+res.getString("TABLE_NAME")
           + ", "+res.getString("TABLE_TYPE")
           + ", "+res.getString("REMARKS")); 
      }
      res.close();
    

    以下方法对您的意图也很重要:

    getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) 
    getExportedKeys(String catalog, String schema, String table)
    getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) 
    getPrimaryKeys(String catalog, String schema, String table) 
    

    【讨论】:

      【解决方案2】:

      SchemaCrawler 提供了一个 Java API,它将数据库元数据呈现为普通的 Java 对象。虽然没有用于比较数据库元数据对象的 API,但 SchemaCrawler 使用标准 diff 工具生成旨在进行 diff 的文本(文本、JSON、CSV、HTML)输出。

      Sualeh Fatehi,SchemaCrawler

      【讨论】:

        【解决方案3】:

        LiquiBasedatabase diff。但我不知道是否有 API,或者只是工具。

        【讨论】:

          【解决方案4】:

          JDBC 是唯一处理数据库的 Java API。

          您必须连接到两者,获取它们各自的 DatabaseMetaData,然后比较两者。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-02-11
            • 1970-01-01
            • 2020-11-21
            • 1970-01-01
            • 2010-11-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多