申请免费网站公司互联网推广方式
前言:
java源码阅读,看看是怎么组织起来表达逻辑的,菜鸟笔记。
1.connection接口作数据库连接对象
1.1一阵土话
类a中有接口A作属性Field,接口A中定义了抽象方法aM,规定了返回值是接口B
调用:类a对象.接口A对象(接口实例化).aM(接口方法),返回值接口B的实现类对象(aM的返回值是对象)
1.2原java语句在这里:
//获取数据库的连接对象Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
1.3解读:DriverManager.getConnection ---DriverManager的静态方法getConnection
getConnection方法原型:
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()));}
查看return内容: return (getConnection(url, info, Reflection.getCallerClass()));
继续查看getConnection()方法
private static Connection getConnection(String url, java.util.Properties info, Class<?> caller) throws SQLException {/** When callerCl is null, we should check the application's* (which is invoking this class indirectly)* classloader, so that the JDBC driver class outside rt.jar* can be loaded from here.*/ClassLoader callerCL = caller != null ? caller.getClassLoader() : null;synchronized(DriverManager.class) {// synchronize loading of the correct classloader.if (callerCL == null) {callerCL = Thread.currentThread().getContextClassLoader();}}if(url == null) {throw new SQLException("The url cannot be null", "08001");}println("DriverManager.getConnection(\"" + url + "\")");// Walk through the loaded registeredDrivers attempting to make a connection.// Remember the first exception that gets raised so we can reraise it.SQLException reason = null;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());}}// if we got here nobody could connect.if (reason != null) {println("getConnection failed: " + reason);throw reason;}println("getConnection: no suitable driver found for "+ url);throw new SQLException("No suitable driver found for "+ url, "08001");}
找到返回值项return(con);
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());}}
其中
Connection con = aDriver.driver.connect(url, info);
就是需要的结果,而这一段可以衔接上1.1,分析如下:
DriverInfo类,包含了接口Drive
class DriverInfo {final Driver driver;DriverAction da;DriverInfo(Driver driver, DriverAction action) {this.driver = driver;da = action;}
接口里有抽象方法connect,返回值是接口对象connection
public interface Driver {Connection connect(String url, java.util.Properties info)throws SQLException;
aDriver是DriverInfo对象,driver是Driver接口类型的属性,connect是Driver接口方法
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);}
如此可以返回一个Connection接口的实现类对象
小结:java里常用接口来实现目的,而不一定在意其具体实现类是什么。
Java里数据传递基本是以对象进行的。