sql >> Database >  >> RDS >> Mysql

Wanneer is Class.forName nodig bij het verbinden met een database via JDBC in een webapp?

JDBC4-stuurprogramma's bevatten een bestand:

META-INF/services/java.sql.Driver

in de jar die het ServiceProvider-mechanisme gebruikt om de Driver-implementatie te registreren bij de JVM (zie javadocs voor java.util.ServiceLoader ). Daarom Class.forName is niet langer nodig.

Ik vermoed dat dit een probleem is met de klassenlader. De ServiceLoader javadoc vermeldt dat:

Ik zou proberen je stuurprogramma in de tomcat\lib . te zetten directory in plaats van uw webapp-directory om te zien of dat een verschil maakt (andere class loader?).

Als u uw web-app start via een ide en een breekpunt instelt, kunt u, zodra u het breekpunt bereikt, de functie "uitdrukking evalueren" gebruiken om het volgende uit te voeren:ServiceLoader.load(Driver.class) . Dit geeft je een ServiceLoader klasse waarin u kunt kijken om te zien welke stuurprogramma's zijn geregistreerd. U kunt controleren of het mysql-stuurprogramma daar is, waar het zich in de lijst bevindt, enz., wat kan helpen bij het achterhalen van het gedrag hier.




  1. Hoe kan ik zoeken in een tabel met door komma's gescheiden waarden?

  2. Een PHP-array opmaken voor een SQL IN-clausule

  3. Naam SQL-kolom gelijk aan PL/SQL-variabelenaam - Hoe kan dit in een select-statement?

  4. Retourrijen die numerieke waarden bevatten in Oracle