javaeclipsehibernatesqliteschemacrawler

Which JAR files are required for SchemaCrawler?


I'm using Eclipse, SQLite database and Hibernate. I want to use SchemaCrawler in my project, already have sqlite-jdbc library. My aim is to compare using SchemaCrawler structure of two databases. But I can't even connect to my first database. I am using this code:

public class SchemaConroller {

    public SchemaConroller() {

        SchemaCrawlerOptions options = new SchemaCrawlerOptions();
        options.setSchemaInfoLevel(SchemaInfoLevelBuilder.standard());


        try {
            Connection conn = getConnection();
            Catalog catalog = SchemaCrawlerUtility.getCatalog(conn, options);
            for (Schema schema : catalog.getSchemas()) {
                System.out.println(schema);
                for (Table table : catalog.getTables(schema)) {
                    System.out.print("o--> " + table);
                    for (Column column : table.getColumns()) {
                        System.out.println("     o--> " + column);
                    }
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static Connection getConnection() throws SchemaCrawlerException, SQLException, ClassNotFoundException {
        String dbPath = "src/home/accounting/DB/myDatabase.sqlite";
        Class.forName("org.sqlite.JDBC");
        Connection c = DriverManager.getConnection("jdbc:sqlite:" + dbPath);
        return c;
    }
}

I always get error:

Oct 12, 2017 1:31:50 PM schemacrawler.utility.SchemaCrawlerUtility matchDatabaseSpecificOverrideOptions
INFO: Using database plugin for 
Oct 12, 2017 1:31:50 PM schemacrawler.utility.TypeMap <init>
WARNING: Could not obtain data type map from connection
java.lang.NullPointerException
    at org.sqlite.jdbc3.JDBC3Connection.getTypeMap(JDBC3Connection.java:90)
    at schemacrawler.utility.TypeMap.<init>(TypeMap.java:116)
    at schemacrawler.crawl.RetrieverConnection.<init>(RetrieverConnection.java:194)
    at schemacrawler.crawl.SchemaCrawler.crawl(SchemaCrawler.java:870)
    at schemacrawler.utility.SchemaCrawlerUtility.getCatalog(SchemaCrawlerUtility.java:75)
    at home.accounting.controller.SchemaConroller.<init>(SchemaConroller.java:35)
    at home.accounting.DA.DBCheck.start(DBCheck.java:44)
    at home.accounting.MainApp.start(MainApp.java:83)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:748)

I downloaded schemacrawler.jar from here. Could it be that any other jars are needed as well?


Solution

  • Alyona, you can ignore the warning in the log that you have posted in your question. The sqlite-jdbc jar is not fully compliant with the JDBC standards, so you have to very particular with the version of that jar. Please use version 3.7.8, which is only available with the SchemaCrawler distribution. In addition, you will need the schemacrawler-sqlite jar corresponding to the version of SchemaCrawler that you are using.

    Sualeh Fatehi, SchemaCrawler