下麵貼出一段規規矩矩的Java連接資料庫的代碼: 這是Java連接資料庫的一整套代碼,大家都不會陌生,我曾經以為背過這些就算會連接資料庫了,我發現自己很錯。 其實我只是在背別人的API而已,沒有絲毫長進。毛主席說過一句話,在戰略上要藐視敵人,在戰術上要重視敵人,在“戰略”上,我要藐視它,我在背API ...
下麵貼出一段規規矩矩的Java連接資料庫的代碼:
Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456"); Statement st=conn.createStatement(); ResultSet rs=st.executeQuery("select * from student");while(rs.next()){ Object o1=rs.getObject(1); Object o2=rs.getObject(2); p(o1+","+o2); } rs.close(); st.close(); conn.close();
這是Java連接資料庫的一整套代碼,大家都不會陌生,我曾經以為背過這些就算會連接資料庫了,我發現自己很錯。
其實我只是在背別人的API而已,沒有絲毫長進。毛主席說過一句話,在戰略上要藐視敵人,在戰術上要重視敵人,在“戰略”上,我要藐視它,我在背API,毫無用處,而我卻以此為榮。在“戰術”上重視它,存在即有它的道理,我背過了熟練了,只是提高了我的開發速度,和我的成長沒有半毛錢關係,我如果數年如一日的只會熟練地掌握它,那我就廢啦。
而我要真正學習的是它背後的思想,背後的架構設計,它是如何做到可擴展性的?它的架構設計到底是咋樣的?。
載入驅動程式
先給出硬體上驅動的含義,驅動程式一般指的是設備驅動程式(Device Driver),是一種可以使電腦和設備通信的特殊程式。相當於硬體的介面,操作系統只有通過這個介面,才能控制硬體設備的工作,假如某設備的驅動程式未能正確安裝,便不能正常工作。
所以,這裡將MySQL資料庫比作硬體設備,Java Application要和它進行通信,MySQL資料庫廠商必須要編寫滿足Java定義的規範的“驅動程式”,到時Java會調用驅動程式運行程式,兩者正常工作。
而Java定義的規範就是java.sql.Driver介面,而MySQL資料庫廠商提供的驅動程式com.mysql.jdbc.Driver實現了該介面。總的來說,Java提供規範,也就是介面,MySQL資料庫廠商提供具體針對MySQL的實現,這樣,利用面向對象的三大特性之一多態,實現了系統了可擴展性。如果客戶要求使用Oracle資料庫,這樣系統架構也不會改變。
對static靜態變數的認識
com.mysql.jdbc.Driver裡面的靜態代碼塊的具體實現:
java.sql.DriverManager.registerDriver(new Driver());
而我們得到連接時,直接使用DriverManager.getConnection(參數)得到了。這是為啥呢?
因為static靜態變數被該類的所有對象所共用,所以我們在任何地方調用DriverManager.getConnection(參數)都可以得到原來註冊的Driver。
所謂的註冊不過就是添加到驅動管理類中的靜態成員變數,註冊之後,在任何地方使用類名或者對象就能獲得該變數中的Driver,然後在進行操作。
總結,這裡利用了static靜態變數的全局共用的特點。
Java介面及MySQL實現類