Tomcat с sqlite - PullRequest
       10

Tomcat с sqlite

0 голосов
/ 31 января 2019

У меня проблема с Tomcat 8 с драйвером sqlite в моем веб-проекте.После запуска приложения на tomcat первое соединение с sqlite завершается неудачно, несмотря на то, что драйвер sqlite инициализирован в java.sql.DriverManager.

Я поместил sqlite-jdbc-3.16.1.jar в мой {tomcat_dir} / lib

И ниже мои зависимости maven:

    <dependency>
        <groupId>org.udger.parser</groupId>
        <artifactId>udger-parser</artifactId>
        <version>1.1.1</version>

        <exclusions>
            <exclusion>
                <groupId>org.xerial</groupId>
                <artifactId>sqlite-jdbc</artifactId>
            </exclusion>
        </exclusions>

    </dependency>

    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.16.1</version>
        <scope>runtime</scope>
    </dependency>

После запуска Tomcat я вижу, что DriverManager.registeredDrivers содержит только один драйвер (правильный, который я собираюсь использовать): driver[className=org.sqlite.JDBC@fbd1f6]

После вызова DriverManager.getConnection("jdbc:sqlite:" + dbFileName, config.toProperties()); DriverManager выдает ошибку:

java.sql.SQLException: не найден подходящий драйвер для jdbc: sqlite:

и добавьте еще один (драйвер [className=org.sqlite.JDBC@751a7d84]) драйвер sqlite к зарегистрированным драйверам (таким образом, в Manager сейчас 2 драйвера SQLITE)

Каждое следующее соединение после первого в порядке.

Я нашел временный обходной путь для этой проблемы: установить соединение init, которое не удастся.

try {
      Connection con = DriverManager.getConnection("jdbc:sqlite:");
      con.close();
    } catch (SQLException e) {}

Знаете ли вы, почему SQL DriverManagВы отказались от использования драйвера sqlite, инициализированного при запуске Tomcat?

Дополнительная информация: В моем проекте я использую внешнюю библиотеку, которая устанавливает соединение с файлом * .dat, расположенным в каталоге ресурсов.URL к точной строке во внешней библиотеке: https://github.com/udger/udger-java/blob/8255eef10cf16cb6665d1fd2d11501fdbfb6175f/src/main/java/org/udger/parser/UdgerParser.java#L583


UPD: проблема решена.Решение состоит в том, чтобы добавить

<scope>provided</scope>

к зависимости sqlite-jdbc


UPD2: также можно использовать sqlite без добавления его библиотеки в библиотеки tomcat.Просто добавьте следующие две строки перед запросом БД:

if (!DriverManager.getDrivers().hasMoreElements()) {
    Class.forName("org.sqlite.JDBC").newInstance();
}
...