2011-09-15 3 views

Répondre

2

Class.forName() est garanti pour initialiser la classe au moment où vous l'appelez. Comment proposeriez-vous de le faire? Pourriez-vous simplement déclarer une variable locale sans l'affecter, comme com.foo.Driver d;? Que diriez-vous d'en faire une variable membre à la place? Devriez-vous l'assigner? Que dit la spécification sur comment et quand une classe doit être chargée? Voulez-vous vraiment avoir à penser à cela, ou simplement appeler Class.forName()?

Sur le même sujet, il est plus nécessaire de le faire avec beaucoup de pilotes JDBC. Le DriverManager now uses the ServiceLoader mechanism pour identifier et charger les classes de pilotes conformes.

0

Il est technique peu pratique à utiliser pour charger les pilotes JDBC autres que la réflexion. (Bien qu'il existe différentes façons de le faire). Il y a beaucoup de pilotes JDBC et le code d'implémentation peut ne pas être disponible pour l'application.

1

L'idée de JDBC est de ne pas dépendre d'un conducteur ou la mise en œuvre spécifique. L'idée est que vous pouvez utiliser JDBC et configurer à l'exécution tout pilote disponible. Pour ce faire, vous devez charger le pilote par son nom et utiliser les méthodes JDBC. Malheureusement, JDBC ne fait pas abstraction de toutes les différences entre les bases de données, comme les codes d'erreur, et le passage à une base de données que vous n'avez pas testée peut ne pas être une bonne idée.

Vous pourriez considérer que pour toutes vos bibliothèques, vous les avez disponibles au moment de la compilation et vous ne changeriez pas la base de données sur un wim, sans un minimum de re-test et de redéploiement de votre application. Dans ce cas, la liaison à un pilote spécifique (au lieu d'utiliser Class.forName) peut être une bonne chose car elle vous obligerait (ou quiconque le fait) à réfléchir davantage au changement et à suivre vos procédures de test.