JDBC的工作原理
JDBC的工作原理:
馬克-to-win:JDBC主要完成三件事:1)建立連接;2)發(fā)送SQL語句;3)處理返回的結(jié)果。緊接著,下節(jié)以實例仔細分析這三條。
馬克- to-win:馬克 java社區(qū):防盜版實名手機尾號: 73203。
細述JDBC的工作原理
緊接著上節(jié)的JDBC的工作原理,下面我們就仔細講講這三條。
1)建立連接:
馬克-to-win:JDBC靠java.sql.DriverManager.getConnection(dbUrl, user, password);和數(shù)據(jù)庫連接。當(dāng)DriverManager執(zhí)行g(shù)etConnection時,它會在內(nèi)存當(dāng)中尋找最合適的驅(qū)動類。(我們在給機器裝聲卡時是不是也得先安裝一個驅(qū)動程序?道理一樣,每一個數(shù)據(jù)庫,都需要有一個專門和它相配的驅(qū)動程序。)所以我們需要事先就把驅(qū)動類加載進來。怎么加載?靠Class.forName (className),在我們以下的例子當(dāng)中就是Class.forName("com.mysql.jdbc.Driver");馬克-to- win:注意:這個類不在jdk的核心包當(dāng)中,因為它只和Mysql這個數(shù)據(jù)庫相關(guān)。如果jdk的核心包中包含這個類的話,那么microsoft公司的 sql server數(shù)據(jù)庫,oracle,或sybase數(shù)據(jù)庫等的驅(qū)動是不是都要包括在jdk的核心包中呢?如果是這樣的話,jdk的核心包會不會變得很大呢?所以這樣的話就出現(xiàn)了一個問題。既然mysql的驅(qū)動類不在jdk的核心包中,我們需要專門在eclipse當(dāng)中把它倒進我們的項目當(dāng)中。注意在今天之前的課程當(dāng)中,我們從來沒接觸過導(dǎo)包,現(xiàn)在就教會大家在eclipse當(dāng)中如何導(dǎo)包。在我的H盤根目錄下,有個文件:mysql-connector- java-3.1.10-bin.jar,我們用WINRAR把它打開,就發(fā)現(xiàn)它里面有com.mysql.jdbc.Driver.class文件。右鍵點擊你的項目,找到Properties。在找Java Build Path。點中Libraries。再點中右邊的Add External Jars。選中mysql-connector-java-3.1.10-bin.jar,如下圖:
2)發(fā)送SQL語句;
馬克-to-win:要想發(fā)送sql語句,就要提到一個叫Statement 的接口。Statement的中文含義是陳述。就利用這個叫“陳述”的接口。你的程序可以向數(shù)據(jù)庫,義正言辭的“陳述”一條一條的sql語句。比如在我們的程序中:resultSet = statement.executeQuery("select * from login");你覺得當(dāng)時sun公司把這個接口起名叫“陳述”形象生動嗎?現(xiàn)在問題來了,這個“陳述”是怎么來的?我要是java的設(shè)計者,我就讓它從剛才第一步獲得的連接當(dāng)中來。因為這樣做非常順理成章,第一步完了就第二步嘛!事實上,sun公司也確實是這么做的。在我們的程序中,就是以下這句: statement = connection.createStatement();
3)處理返回的結(jié)果。
馬克-to-win:剛才的這句resultSet = statement.executeQuery("select * from login");是把select * from login這句sql語句發(fā)送給數(shù)據(jù)庫。對數(shù)據(jù)庫有所了解的人都知道,當(dāng)我們直接向數(shù)據(jù)庫輸入sql語句:select * from login時,數(shù)據(jù)庫會給我們返回一個表?,F(xiàn)在其實也一樣,當(dāng)我們的程序向數(shù)據(jù)庫發(fā)送一個ql語句時,也得到了一個表,只不過這個表現(xiàn)在完全放在 resultSet當(dāng)中。我們通過一個循環(huán)while (resultSet.next()),就可以一行一行的處理這個表。再分別通過resultSet.getString("id") 和resultSet.getString("name"),我們就分別得到了id和name這兩列數(shù)據(jù)。