Chapter 106: JDBC Driver in Java
A JDBC driver is a library implementing java.sql.Driver. DriverManager asks registered drivers “can you handle this URL?” until one accepts and returns a Connection. Modern drivers ship META-INF/services/java.sql.Driver so Java 6+ ServiceLoader can auto-register them when the JAR is on the classpath.
1. Topic title
Driver: translates JDBC calls to database protocol; the JDBC URL is the handshake string
2. What it means
Type 4 (“thin”) drivers are pure Java (or mostly) speaking the database network protocol—what you want for Postgres, MySQL, SQL Server in server apps.
Older Type 1/2 drivers (ODBC bridge, native JNI) are legacy footnotes—do not start new projects on them.
Maven / Gradle coordinate example for Postgres: artifact org.postgresql:postgresql—equivalent to dropping postgresql-*.jar next to your javac command for learning.
3. Why it is used
Decouple application bytecode from vendor wire format—swap drivers when you upgrade database minor versions.
Security patches ship as driver releases—easier than patching monolithic DB client installs everywhere.
4. Mental sketch
DriverManager is a concierge: you show a ticket (URL); the concierge finds the bellhop (Driver) with a matching uniform (protocol prefix).
5. Java code example
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
public class DriverIntrospectionDemo {
public static void main(String[] args) throws SQLException {
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
Driver d = drivers.nextElement();
System.out.println(d.getClass().getName());
}
}
}With postgresql.jar present you should see org.postgresql.Driver (package names track versions).
6. Explanation of code
Explicit Class.forName("org.postgresql.Driver") was required in very old tutorials—today rely on ServiceLoader unless you are in an exotic classloader environment (some OSGi / isolated plugin setups).
7. Common mistakes
Fat-jar shading that strips META-INF/services—breaks auto registration; symptoms match “No suitable driver.”
Mixing two major driver versions on one classpath—subtle protocol bugs; pick one coordinate and lock it.
8. Best practices
Pin driver versions in dependency management; read release notes when upgrading database and driver together.
Prefer DataSource implementations (HikariCP, container pools) in apps—Chapter 107 still uses DriverManager for clarity.
9. Small practice task
Print DriverManager.getDriver("jdbc:postgresql://localhost/db").getMajorVersion() after your driver loads—confirm you are not accidentally running a stale JAR from some old lib/ folder.
Beginner tip
If getDrivers() prints nothing, your IDE run configuration forgot the driver module/JAR—fix the run classpath, not the SQL string first.