Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kiedy Class.forName jest potrzebne podczas łączenia się z bazą danych przez JDBC w aplikacji internetowej?

Sterowniki JDBC4 zawierają plik:

META-INF/services/java.sql.Driver

w słoiku, który używa mechanizmu ServiceProvider do zarejestrowania implementacji sterownika w JVM (zobacz javadocs dla java.util.ServiceLoader ). Dlatego Class.forName nie jest już potrzebne.

Domyślam się, że jest to problem z ładowaczem klas. ServiceLoader javadoc wspomina, że:

Spróbowałbym umieścić twój sterownik w tomcat\lib zamiast katalogu aplikacji internetowej, aby sprawdzić, czy to robi różnicę (inny program ładujący klasy?).

Jeśli uruchomisz swoją aplikację internetową za pomocą ide i ustawisz punkt przerwania, po osiągnięciu punktu przerwania możesz użyć funkcji „oceny wyrażenia”, aby wykonać:ServiceLoader.load(Driver.class) . To da ci ServiceLoader klasy, do której możesz zajrzeć, aby zobaczyć, którzy kierowcy są zarejestrowani. Możesz sprawdzić, czy sterownik mysql jest tam, gdzie jest na liście itp., co może pomóc w ustaleniu zachowania tutaj.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz się z bazą danych mysql przez SSH przez PHP

  2. Mysql:Utworzyć tabelę w wierszu w instrukcji SELECT?

  3. Jak czytać pliki dziennika binarnego MySQL (BinLog) za pomocą mysqlbinlog

  4. Problem ze znakami cyrylicy w przyjaznym adresie URL

  5. Wykrywanie zablokowanych tabel (zablokowanych przez LOCK TABLE)