Mysql
 sql >> база данни >  >> RDS >> Mysql

Кога е необходим Class.forName при свързване към база данни чрез JDBC в уеб приложение?

JDBC4 драйверите включват файл:

META-INF/services/java.sql.Driver

в бурканчето, което използва механизма на ServiceProvider за регистриране на реализацията на драйвера с JVM (вижте javadocs за java.util.ServiceLoader ). Ето защо Class.forName вече не е необходимо.

Предполагам, че това е проблем със зареждане на класове. ServiceLoader javadoc споменава, че:

Бих опитал да сложа вашия драйвер в tomcat\lib директория, а не директория на вашето уеб приложение, за да видите дали това прави разлика (различен зареждане на класове?).

Ако стартирате вашето уеб приложение чрез ide и зададете точка на прекъсване, след като ударите точката на прекъсване, можете да използвате функцията „оценка на израза“, за да изпълните:ServiceLoader.load(Driver.class) . Това ще ви даде ServiceLoader клас, в който можете да надникнете, за да видите кои драйвери са регистрирани. Можете да проверите дали драйверът на mysql е там, къде в списъка се намира и т.н., което може да ви помогне да разберете поведението тук.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL таблица с резултати, съвпадение във втората таблица тип SET

  2. MySQL разграничение между e и é (e acute) - УНИКАЛЕН индекс

  3. MySql Connector 6.8.2 RC, Entity Framework 6 и Code First

  4. LOAD DATA LOCAL INFILE дава грешка. Използваната команда не е разрешена с тази версия на MySQL

  5. Как да разположите MySQL в Ubuntu и напълно управляван