JDBC Driver Registration: Class.forName() Deprecation
The question raises concerns regarding the outdated requirement to register JDBC drivers using Class.forName(), as suggested in a previous Stack Overflow discussion. It states that since Java 6, DriverManager employs the system property "jdbc.drivers" to retrieve the appropriate driver, eliminating the need for this step. However, the poster encounters a null value when printing the property.
Answer:
The issue lies not with the "jdbc.drivers" property but rather with a concept introduced in Java 6 and JDBC4 known as "service provider." Here, implementations of known interfaces are automatically detected by the JVM during startup. Compliant JDBC drivers exploit this mechanism, allowing the DriverManager to register them effortlessly. Hence, Class.forName() becomes redundant only when drivers support this feature.
The service registration is triggered by the presence of a "services" directory within the META-INF directory of the driver's JAR file. This directory must house a text file bearing the name of the implemented interface (e.g., "java.sql.Driver" for JDBC drivers) and specifying the implementing class.
The above is the detailed content of Is Class.forName() for JDBC Driver Registration Still Necessary?. For more information, please follow other related articles on the PHP Chinese website!