0x00 前言
自己一直说要某个开源项目的源码,但是一直没有真正地好好开始,一是以为看源码其实不容易看懂,而是因为选择犹豫,最后也敲定看哪个。
这次正式开始看jdbc的源码有两个三个:一是因为《java编程思想》这本书快看完了,折腾一个多月的时间,里面除了多线程和图形编程这两块基本都看得差不多了;一个是因为《设计模式之禅》这本书看了一半左右,里面的设计模式自己大致都明白是什么隐私,但是印象不深刻,需要有一个稳固的过程;一个是因为jdbc相对来说比较熟悉,加上以后肯定会常和数据库打交道,因此就决定看了。
在分析源码的时候,我会先自己理清思路,然后再回头来总结,总结的过程尽量地变成一个探索的过程,以此来梳理自己看源码的方法论。
0x01 阅读环境
- ide:idea15
- jdk:7
- mysql-connector-java:5.1.34
- h2:1.4.187
这次选了mysql和h2两款数据库的jdbc程序来分析,mysql是因为这个是最常用的,以后也会经常和它打交道,h2是因为它是java写的数据库,以后准备看它的源码,现在先提前了解一下。
0x02 jdbc示例
下面是一个最基本的jdbc示例,通过这个例子,后面我会详细地介绍整个流程。
第一个jdbc程序
这是一个最基本的jdbc连接程序,我省掉了异常处理。
public class JDBCTest {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//STEP 1: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 2: Open a connection
conn = DriverManager.getConnection("jdbc:mysql://192.168.108.145/test", "root", "root");
//STEP 3: Execute a query
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from userinfo limit 1");
//STEP 4: Get results
while(rs.next()){
System.out.println(rs.getString("id"));
}
rs.close();
}catch(SQLException se){
......
}//end try
}
}
maven依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
jdbc流程
从例