У меня проблема с 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();
}