sql >> Database teknologi >  >> RDS >> Mysql

Hvornår er Class.forName nødvendig, når der oprettes forbindelse til en database via JDBC i en webapp?

JDBC4-drivere inkluderer en fil:

META-INF/services/java.sql.Driver

i krukken, som bruger ServiceProvider-mekanismen til at registrere driverimplementeringen med JVM (se javadocs for java.util.ServiceLoader ). Det er derfor Class.forName er ikke længere nødvendig.

Mit gæt er, at dette er et problem med klasseindlæser. ServiceLoader javadoc nævner, at:

Jeg ville prøve at sætte din driver i tomcat\lib bibliotek i stedet for din webapp-mappe for at se, om det gør en forskel (anden klasseindlæser?).

Hvis du starter din webapp gennem en ide og indstiller et brudpunkt, når du har ramt brudpunktet, kan du bruge funktionen "evaluer udtryk" til at udføre:ServiceLoader.load(Driver.class) . Dette vil give dig en ServiceLoader klasse, som du kan kigge ind i for at se, hvilke kørere der er registreret. Du kan tjekke om mysql-driveren er der, hvor på listen den er osv., hvilket kan hjælpe med at finde ud af adfærden her.




  1. Beder om et legitimt eksempel på at kalde lagret procedure C#:MYSQL

  2. Sådan indsætter du en mikrosekund-præcision datetime i mysql?

  3. Lagringsgrænser for MySQL brugerdefinerede variabler

  4. Advarsel:mysqli_connect():(28000/1045):Adgang nægtet for bruger