JDBC项目实践与源码解析——打开数据库连接
本专栏为系列文章,如果想要系统学习JDBC,作者建议从第一篇文章,顺序读完全部文章。
文中项目源码地址:https://github.com/bethanwang/jdbc-study
利用给定的数据库资源(url/username/password),通过调用DriverManager
的getConnection(url, userName, password)
方法,获取数据库链接对象。
//打开链接
conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD);
源码解析:
java.sql.DriverManager
类:
public class DriverManager {
public static Connection getConnection(String url, String user,
String password) throws SQLException {
java.util.Properties info = new java.util.Properties();
if (user != null) {
info.put("user", user);
}
if (password != null) {
info.put("password", password);
}
return (getConnection(url, info, Reflection.getCallerClass()));
}
private static Connection getConnection(
/*
省略部分源码...
*/
//遍历已注册的驱动对象集合
for(DriverInfo aDriver : registeredDrivers) {
// If the caller does not have permission to load the driver then
// skip it.
if(isDriverAllowed(aDriver.driver, callerCL)) {
try {
println(" trying " + aDriver.driver.getClass().getName());
Connection con = aDriver.driver.connect(url, info);
if (con != null) {
// Success!
println("getConnection returning " + aDriver.driver.getClass().getName());
return (con);
}
} catch (SQLException ex) {
if (reason == null) {
reason = ex;
}
}
} else {
println(" skipping: " + aDriver.getClass().getName());
}
}
//for循环结束
/*
省略部分源码...
*/
}
}
for(DriverInfo aDriver : registeredDrivers){...}
循环遍历已经注册到DriverManager
中的驱动对象,然后逐个利用驱动对象创建Connection
,返回第一个创建成功的Connection
对象。
上一篇:JDBC深入讲解——加载驱动
下一篇:JDBC深入讲解——创建会话
受作者水平限制,文中难免有不足之处,若读者阅读过程中发现问题,还望及时指正,感谢支持!
作者邮箱:547317812@qq.com