java.sql.Driver接口规定了Driver应该具有以下功能,重要的有三个acceptsURL判断jdbcUrl是否支持、创建一个连接、获取属性信息,三个主要接口。
下边以 NonRegisteringDriver
类的源码简单分析以下。
acceptsURL
acceptsURL(String url) 方法用来测试对指定的url,该驱动能否打开这个url连接。driver对自己能够连接的url会制定自己的协议,只有符合自己的协议形式的url才认为自己能够打开这个url,如果能够打开,返回true,反之,返回false;
Mysql-JDBC支持的驱动协议有:
-
jdbc:mysql+srv:
-
jdbc:mysql+srv:loadbalance:
-
jdbc:mysql+srv:replication:
-
mysqlx+srv:
-
jdbc:mysql:
-
jdbc:mysql:loadbalance:
-
jdbc:mysql:replication:
-
mysqlx:
connect
这里会根据URL 创建一个连接。一般是ConnectionImpl类型,下一篇文章会细说一下。其他类型的连接就先不看了。
public java.sql.Connection connect(String url, Properties info) throws SQLException {
try {
// 如果url是不自持的连接协议,则返回null
if (!ConnectionUrl.acceptsUrl(url)) {
return null;
}
ConnectionUrl conStr = ConnectionUrl.getConnectionUrlInstance(url, info);
switch (conStr.getType()) {
case SINGLE_CONNECTION:
return com.mysql.cj.jdbc.ConnectionImpl.getInstance(conStr.getMainHost());
case FAILOVER_CONNECTION:
case FAILOVER_DNS_SRV_CONNECTION:
return FailoverConnectionProxy.createProxyInstance(conStr);
case LOADBALANCE_CONNECTION:
case LOADBALANCE_DNS_SRV_CONNECTION:
return LoadBalancedConnectionProxy.createProxyInstance(conStr);