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