sql >> Databasteknik >  >> RDS >> Mysql

När behövs Class.forName när man ansluter till en databas via JDBC i en webbapp?

JDBC4-drivrutiner inkluderar en fil:

META-INF/services/java.sql.Driver

i burken som använder ServiceProvider-mekanismen för att registrera drivrutinsimplementeringen med JVM (se javadocs för java.util.ServiceLoader ). Det är därför Class.forName är inte längre nödvändigt.

Min gissning är att detta är ett problem med klassladdning. ServiceLoader javadoc nämner att:

Jag skulle försöka lägga in din drivrutin i tomcat\lib katalog snarare än din webbappskatalog för att se om det gör någon skillnad (annan klass laddare?).

Om du startar din webbapp via en ide och ställer in en brytpunkt, när du har nått brytpunkten, kan du använda funktionen "evaluate expression" för att köra:ServiceLoader.load(Driver.class) . Detta ger dig en ServiceLoader klass som du kan kika in i för att se vilka förare som är registrerade. Du kan kontrollera om mysql-drivrutinen finns där, var i listan den finns, etc, vilket kan hjälpa dig att ta reda på beteendet här.




  1. Är det möjligt att referera till kolumnnamn via bindningsvariabler i Oracle?

  2. Säkerhetsnät

  3. SQL Server 2016 Temporal Table Query Plan Beteende

  4. TIME_FORMAT() Exempel – MySQL