JDBC---一種用于執(zhí)行SQL的Java API
Posted on 2007-04-19 00:12 與心牽手 閱讀(1104) 評(píng)論(0) 編輯 收藏 所屬分類: java學(xué)習(xí) JDBC是一種用于執(zhí)行SQL的Java API,它本身是個(gè)商標(biāo)名,但很多人把它認(rèn)為是Java Database Connectivity(Java 數(shù)據(jù)庫連接)的縮寫。
JDBC是一組訪問數(shù)據(jù)庫的API集合,通過加載由數(shù)據(jù)庫廠商所提供的驅(qū)動(dòng)程序,可以與數(shù)據(jù)庫建立連接。這樣,就不必為訪問不同的數(shù)據(jù)庫而寫不同的程序了,只需用一個(gè)JDBC API寫一個(gè)程序就夠了。而且是,JDBC技術(shù)對(duì)開發(fā)者屏蔽了一些細(xì)節(jié)問題,這樣,程序員就不必去關(guān)心底層的實(shí)現(xiàn)技術(shù)了。另外,跟java一樣,JDBC 對(duì)數(shù)據(jù)庫的訪問也具有平臺(tái)無關(guān)性。
JDBC訪問數(shù)據(jù)庫的步驟:
1.注冊(cè)并加載驅(qū)動(dòng)程序:
驅(qū)動(dòng)程序是數(shù)據(jù)廠商所提供的一個(gè)對(duì)外的接口來分辨所訪問的是哪一種數(shù)據(jù)庫.
我們可以調(diào)用Class.forName()顯示地加載驅(qū)動(dòng)程序.方法如下(以MySql為例):
Class.forName("org.gjt.mm.mysql.Driver");
Class.forName()是一個(gè)靜態(tài)方法,用于指示Java虛擬機(jī)動(dòng)態(tài)的查找,加載和鏈接指定類(如果尚未加載).如果無法找到這個(gè)類,則拋出ClassNotFountException.
2.創(chuàng)建連接:
數(shù)據(jù)庫連接是使用DriverManager對(duì)象的靜態(tài)方法getConnection()建立的,方法如下:
String url = "jdbc:mysql://127.0.0.1:3306/qq"; //127.0.0.1為連接地址,qq為數(shù)據(jù)庫名
Connection conn = DriverManager.getConnection(url, "root", "root");
// "root", "root"為用戶名和密碼
3.創(chuàng)建SQL語句對(duì)象:
SQL語句對(duì)象主要是用來執(zhí)行SQL語句的,當(dāng)建立了連接以后,便可以由Statement對(duì)象將SQL語句發(fā)送到DBMS.對(duì)SELECT語句,可使用executeQuery();對(duì)于創(chuàng)建或修改表的語句,使用executeUpdate();方法如下:
Statement st = conn.createStatement();
4.提交SQL語句:
得到創(chuàng)建SQL語句對(duì)象后,我們就可以提交SQL語句了,方法如下:
a.查詢數(shù)據(jù):
ResultSet rs = st.executeQuery("select * from login"); //返回查詢SQL語句所得到的ResultSet對(duì)象格式的結(jié)果集.
b.添加數(shù)據(jù):
int i = st.executeUpdate( "insert into login values('zhang','123')"); //這個(gè)方法返回值是一個(gè)整數(shù),代表的是影響數(shù)據(jù)的行數(shù).
我們也可以用Statement的子接口PreparedStatement來實(shí)現(xiàn)提交,而PreparedStatement的子接口CallableStatement則用于執(zhí)行SQL存儲(chǔ)過程.
5.顯示結(jié)果:
當(dāng)執(zhí)行查詢語句時(shí),SQL語句的執(zhí)行結(jié)果存儲(chǔ)在ResultSet對(duì)象中.我們可以使用Getxxx方法來檢索數(shù)據(jù).方法如下:
while(rs.next()){
String name = set.getString("name");
String password = set.getString("password");
}
如果發(fā)送的SQL語句不是查詢語句,則這一步將省略.
6.關(guān)閉連接:
當(dāng)完成數(shù)據(jù)庫操作后,需要將連接關(guān)閉.因?yàn)閿?shù)據(jù)庫連接需要消耗系統(tǒng)資源.一旦不需要使用的時(shí)候,就應(yīng)該釋放出來.這是程序員必須養(yǎng)成的良好的習(xí)慣.在關(guān)閉連接時(shí),正確的順序是:Result,Statement,Connection.語法如下:
rs.close();
st.cloe();
conn.close();
為確保所有的連接能夠被關(guān)閉,應(yīng)該把關(guān)閉語句寫在finally塊中,這樣,不管操作數(shù)據(jù)庫過程中是否發(fā)生異常,都能夠?qū)①Y源釋放出來.
連接其它的數(shù)據(jù)庫步驟均相同,只需更改驅(qū)動(dòng)程序即可.
JDBC是一組訪問數(shù)據(jù)庫的API集合,通過加載由數(shù)據(jù)庫廠商所提供的驅(qū)動(dòng)程序,可以與數(shù)據(jù)庫建立連接。這樣,就不必為訪問不同的數(shù)據(jù)庫而寫不同的程序了,只需用一個(gè)JDBC API寫一個(gè)程序就夠了。而且是,JDBC技術(shù)對(duì)開發(fā)者屏蔽了一些細(xì)節(jié)問題,這樣,程序員就不必去關(guān)心底層的實(shí)現(xiàn)技術(shù)了。另外,跟java一樣,JDBC 對(duì)數(shù)據(jù)庫的訪問也具有平臺(tái)無關(guān)性。
JDBC訪問數(shù)據(jù)庫的步驟:
1.注冊(cè)并加載驅(qū)動(dòng)程序:
驅(qū)動(dòng)程序是數(shù)據(jù)廠商所提供的一個(gè)對(duì)外的接口來分辨所訪問的是哪一種數(shù)據(jù)庫.
我們可以調(diào)用Class.forName()顯示地加載驅(qū)動(dòng)程序.方法如下(以MySql為例):
Class.forName("org.gjt.mm.mysql.Driver");
Class.forName()是一個(gè)靜態(tài)方法,用于指示Java虛擬機(jī)動(dòng)態(tài)的查找,加載和鏈接指定類(如果尚未加載).如果無法找到這個(gè)類,則拋出ClassNotFountException.
2.創(chuàng)建連接:
數(shù)據(jù)庫連接是使用DriverManager對(duì)象的靜態(tài)方法getConnection()建立的,方法如下:
String url = "jdbc:mysql://127.0.0.1:3306/qq"; //127.0.0.1為連接地址,qq為數(shù)據(jù)庫名
Connection conn = DriverManager.getConnection(url, "root", "root");
// "root", "root"為用戶名和密碼
3.創(chuàng)建SQL語句對(duì)象:
SQL語句對(duì)象主要是用來執(zhí)行SQL語句的,當(dāng)建立了連接以后,便可以由Statement對(duì)象將SQL語句發(fā)送到DBMS.對(duì)SELECT語句,可使用executeQuery();對(duì)于創(chuàng)建或修改表的語句,使用executeUpdate();方法如下:
Statement st = conn.createStatement();
4.提交SQL語句:
得到創(chuàng)建SQL語句對(duì)象后,我們就可以提交SQL語句了,方法如下:
a.查詢數(shù)據(jù):
ResultSet rs = st.executeQuery("select * from login"); //返回查詢SQL語句所得到的ResultSet對(duì)象格式的結(jié)果集.
b.添加數(shù)據(jù):
int i = st.executeUpdate( "insert into login values('zhang','123')"); //這個(gè)方法返回值是一個(gè)整數(shù),代表的是影響數(shù)據(jù)的行數(shù).
我們也可以用Statement的子接口PreparedStatement來實(shí)現(xiàn)提交,而PreparedStatement的子接口CallableStatement則用于執(zhí)行SQL存儲(chǔ)過程.
5.顯示結(jié)果:
當(dāng)執(zhí)行查詢語句時(shí),SQL語句的執(zhí)行結(jié)果存儲(chǔ)在ResultSet對(duì)象中.我們可以使用Getxxx方法來檢索數(shù)據(jù).方法如下:
while(rs.next()){
String name = set.getString("name");
String password = set.getString("password");
}
如果發(fā)送的SQL語句不是查詢語句,則這一步將省略.
6.關(guān)閉連接:
當(dāng)完成數(shù)據(jù)庫操作后,需要將連接關(guān)閉.因?yàn)閿?shù)據(jù)庫連接需要消耗系統(tǒng)資源.一旦不需要使用的時(shí)候,就應(yīng)該釋放出來.這是程序員必須養(yǎng)成的良好的習(xí)慣.在關(guān)閉連接時(shí),正確的順序是:Result,Statement,Connection.語法如下:
rs.close();
st.cloe();
conn.close();
為確保所有的連接能夠被關(guān)閉,應(yīng)該把關(guān)閉語句寫在finally塊中,這樣,不管操作數(shù)據(jù)庫過程中是否發(fā)生異常,都能夠?qū)①Y源釋放出來.
連接其它的數(shù)據(jù)庫步驟均相同,只需更改驅(qū)動(dòng)程序即可.