当我将其添加到pom.xml时:

    <!-- https://mvnrepository.com/artifact/us.fatehi/schemacrawler-mariadb -->
    <dependency>
        <groupId>us.fatehi</groupId>
        <artifactId>schemacrawler-mariadb</artifactId>
        <version>14.08.06</version>
    </dependency>


然后我得到一个错误:

java.util.ServiceConfigurationError: schemacrawler.tools.databaseconnector.DatabaseConnector: Provider schemacrawler.server.mariadb.MariaDBDatabaseConnector could not be instantiated
..
Caused by: java.lang.NoSuchMethodError: schemacrawler.tools.databaseconnector.DatabaseConnector.<init>(Lschemacrawler/tools/databaseconnector/DatabaseServerType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V


我正在尝试连接到Oracle数据库。如果我从pom中省略MariaDb,则此方法有效。

我使用的是SchemaCrawler的更高版本:

    <dependency>
        <groupId>us.fatehi</groupId>
        <artifactId>schemacrawler</artifactId>
        <version>14.21.02</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/us.fatehi/schemacrawler-oracle -->
    <dependency>
        <groupId>us.fatehi</groupId>
        <artifactId>schemacrawler-oracle</artifactId>
        <version>14.21.02</version>
    </dependency>


我想在pom.xml中拥有MariaDB,并且仍然能够使用SchemaCrawler读取Oracle。连接到数据库后,在以下代码的最后一行中会发生错误:

        Connection dbConnection = DatabaseBroker.getDbConnection(
                eventName,
                cbDatabase.getValue(),
                tConnectionString.getValue(),
                tUsername.getValue(),
                tPassword.getValue()
        );

        //Schema schema = SchemaCrawler.getSchema(dbConnection, SchemaInfoLevel.detailed(), new SchemaCrawlerOptions());
        //SchemaCrawler sc = new SchemaCrawler(dbConnection, null);
        try
        {
            Catalog catalog = SchemaCrawlerUtility.getCatalog(dbConnection, null);

最佳答案

您正在使用主SchemaCrawler库和SchemaCrawler数据库插件的不兼容版本。如果要连接到Oracle,则不需要MariaDB插件。实际上,即使在类路径上没有SchemaCrawler数据库插件,SchemaCrawler仍可用于大多数数据库。

07-25 22:34