Java程序設(shè)計(jì)實(shí)用教程_第11章_JDBC數(shù)據(jù)庫操作_第1頁
Java程序設(shè)計(jì)實(shí)用教程_第11章_JDBC數(shù)據(jù)庫操作_第2頁
Java程序設(shè)計(jì)實(shí)用教程_第11章_JDBC數(shù)據(jù)庫操作_第3頁
Java程序設(shè)計(jì)實(shí)用教程_第11章_JDBC數(shù)據(jù)庫操作_第4頁
Java程序設(shè)計(jì)實(shí)用教程_第11章_JDBC數(shù)據(jù)庫操作_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1注意:開始用功了注意:開始用功了!2Java程序設(shè)計(jì)實(shí)用教程程序設(shè)計(jì)實(shí)用教程 第第11章章配合例子源代碼一起使用例子源代碼一起使用Power point 制作:耿祥義 張躍平JDBC數(shù)據(jù)庫操作 3導(dǎo)導(dǎo)讀讀411.1 Microsoft Access Microsoft Access 數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng) 11.1.1 建立數(shù)據(jù)庫建立數(shù)據(jù)庫 建立一個(gè)名字為建立一個(gè)名字為shopshop的數(shù)據(jù)庫。的數(shù)據(jù)庫。操作步驟如下:操作步驟如下: 單擊單擊“開始開始”“”“所有程所有程序序”“”“Microsoft Access”Microsoft Access”,在 新 建 數(shù) 據(jù) 庫 界 面 選

2、 擇在 新 建 數(shù) 據(jù) 庫 界 面 選 擇 “ 空空AccessAccess數(shù)據(jù)庫數(shù)據(jù)庫”,然后命名、保,然后命名、保存新建的數(shù)據(jù)庫,在這里我們命存新建的數(shù)據(jù)庫,在這里我們命名 的 數(shù) 據(jù) 庫 是名 的 數(shù) 據(jù) 庫 是 s h o ps h o p , 保 存 在保 存 在C:ch11C:ch11中。中。 511.1.2 創(chuàng)建表創(chuàng)建表 在在shopshop數(shù)據(jù)庫中創(chuàng)建名字為數(shù)據(jù)庫中創(chuàng)建名字為goodsgoods的表。在的表。在shopshop管理管理的的“表表”的界面上選擇的界面上選擇“使用設(shè)計(jì)器創(chuàng)建表使用設(shè)計(jì)器創(chuàng)建表”,然后單,然后單擊界面上的擊界面上的“設(shè)計(jì)設(shè)計(jì)”菜單,將出現(xiàn)相應(yīng)的建表界面

3、,我菜單,將出現(xiàn)相應(yīng)的建表界面,我們建立的表是們建立的表是goodsgoods,該表的字段該表的字段( (屬性屬性) )為:為:number(文本文本) name(文本文本) madeTime(日期日期) price(數(shù)字,雙精度數(shù)字,雙精度) 在在shop管理的管理的“表表”的界面上,用鼠標(biāo)雙擊已創(chuàng)建的界面上,用鼠標(biāo)雙擊已創(chuàng)建的表可以為該表添加記錄的表可以為該表添加記錄。611.2 JDBCJDBC JDBC(Java DataBase Connection)是Java數(shù)據(jù)庫連接API。簡(jiǎn)單地說,JDBC能完成3件事: 與一個(gè)數(shù)據(jù)庫建立連接。與一個(gè)數(shù)據(jù)庫建立連接。 向數(shù)據(jù)庫發(fā)送向數(shù)據(jù)庫發(fā)送S

4、QLSQL語句。語句。 處理處理SQLSQL語句返回的結(jié)果。語句返回的結(jié)果。711.3 連接數(shù)據(jù)庫連接數(shù)據(jù)庫 11.3.1 連接方式的選擇連接方式的選擇 和數(shù)據(jù)庫建立連接的常用兩種方式是:建立和數(shù)據(jù)庫建立連接的常用兩種方式是:建立JDBCODBCJDBCODBC橋接橋接器和加載純器和加載純JavaJava數(shù)據(jù)庫驅(qū)動(dòng)程序。使用數(shù)據(jù)庫驅(qū)動(dòng)程序。使用JDBCODBCJDBCODBC橋接器方式的橋接器方式的機(jī)制是,應(yīng)用程序只需建立機(jī)制是,應(yīng)用程序只需建立JDBCJDBC和和ODBCODBC之間的連接,即所謂的建之間的連接,即所謂的建立立JDBCODBCJDBCODBC橋接器,而和數(shù)據(jù)庫的連接由橋接器,

5、而和數(shù)據(jù)庫的連接由ODBCODBC去完成。去完成。 使用使用JDBCODBC橋接器連接數(shù)據(jù)庫的橋接器連接數(shù)據(jù)庫的3個(gè)步驟個(gè)步驟建立JDBC-ODBC橋接器 創(chuàng)建ODBC數(shù)據(jù)源 和ODBC數(shù)據(jù)源建立連接811.3.2 建立建立JDBC-ODBCJDBC-ODBC橋接器橋接器 JDBC使用使用java.lang包中的包中的Class類建立類建立JDBC-ODBC橋接器。建立橋接器時(shí)可能發(fā)生異常,必須捕獲這個(gè)異橋接器。建立橋接器時(shí)可能發(fā)生異常,必須捕獲這個(gè)異常,建立橋接器的代碼是:常,建立橋接器的代碼是:try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

6、catch(ClassNotFoundException e) System.out.println(e); 911.3.3 ODBCODBC數(shù)據(jù)源數(shù)據(jù)源 1 1創(chuàng)建、修改或刪除數(shù)據(jù)源創(chuàng)建、修改或刪除數(shù)據(jù)源 選擇選擇“控制面板控制面板”“”“管理工具管理工具”“”“ODBCODBC數(shù)據(jù)源數(shù)據(jù)源”(某些(某些window/window/xpxp系統(tǒng),需選擇系統(tǒng),需選擇“控制面板控制面板”“”“性能和維護(hù)性能和維護(hù)”“”“管管理工具理工具”“”“ODBCODBC數(shù)據(jù)源數(shù)據(jù)源”)。)。 雙擊雙擊ODBCODBC數(shù)據(jù)源圖標(biāo),出現(xiàn)的界面顯示了用戶已有的數(shù)據(jù)源的數(shù)據(jù)源圖標(biāo),出現(xiàn)的界面顯示了用戶已有的數(shù)據(jù)源

7、的名稱。選擇名稱。選擇“系統(tǒng)系統(tǒng)DSN”DSN”或或“用戶用戶DSN”DSN”,單擊單擊“添加添加”按鈕,可按鈕,可以創(chuàng)建新的數(shù)據(jù)源;單擊以創(chuàng)建新的數(shù)據(jù)源;單擊“配置配置”按鈕,可以重新配置已有的數(shù)按鈕,可以重新配置已有的數(shù)據(jù)源;單擊據(jù)源;單擊“刪除刪除”按鈕,可以刪除已有的數(shù)據(jù)源。按鈕,可以刪除已有的數(shù)據(jù)源。2 2為數(shù)據(jù)源選擇驅(qū)動(dòng)程序?yàn)閿?shù)據(jù)源選擇驅(qū)動(dòng)程序 因?yàn)橐L問因?yàn)橐L問AccessAccess數(shù)據(jù)庫數(shù)據(jù)庫, ,選擇選擇Microsoft Acess Driver(*.mdb)。3 3數(shù)據(jù)源名稱及對(duì)應(yīng)數(shù)據(jù)庫的所在位置數(shù)據(jù)源名稱及對(duì)應(yīng)數(shù)據(jù)庫的所在位置 在在名稱欄名稱欄里為數(shù)據(jù)源起一個(gè)自己喜

8、歡的名字,這里我們起的里為數(shù)據(jù)源起一個(gè)自己喜歡的名字,這里我們起的名字是名字是myDatamyData。這個(gè)數(shù)據(jù)源就是指某個(gè)數(shù)據(jù)庫。在這個(gè)數(shù)據(jù)源就是指某個(gè)數(shù)據(jù)庫。在“數(shù)據(jù)庫選擇數(shù)據(jù)庫選擇”欄中選擇一個(gè)數(shù)據(jù)庫,這里我們選擇的是欄中選擇一個(gè)數(shù)據(jù)庫,這里我們選擇的是C:ch11下的下的shop.mdb數(shù)據(jù)庫。數(shù)據(jù)庫。 1011.3.4 建立連接建立連接 編寫連接數(shù)據(jù)庫代碼不會(huì)出現(xiàn)數(shù)據(jù)庫的名稱,只能出現(xiàn)數(shù)編寫連接數(shù)據(jù)庫代碼不會(huì)出現(xiàn)數(shù)據(jù)庫的名稱,只能出現(xiàn)數(shù)據(jù)源的名字。據(jù)源的名字。 首先使用首先使用java.java.sqlsql包中的包中的ConnectionConnection類類聲明一個(gè)對(duì)象,然后聲

9、明一個(gè)對(duì)象,然后再使用類再使用類DriverManagerDriverManager調(diào)用它的靜態(tài)方法調(diào)用它的靜態(tài)方法getConnectiongetConnection創(chuàng)建這創(chuàng)建這個(gè)連接對(duì)象,個(gè)連接對(duì)象,建立連接時(shí)應(yīng)捕獲建立連接時(shí)應(yīng)捕獲SQLException異常異常 :try Connection con= DriverManager.getConnection( jdbc:odbc:數(shù)據(jù)源名字?jǐn)?shù)據(jù)源名字 , login name , password ); catch(SQLException e) 例例11-1 Example11_1.java 1111.4 查詢操作查詢操作 對(duì)一個(gè)數(shù)據(jù)

10、庫中表進(jìn)行查詢操作的具體步驟如下。對(duì)一個(gè)數(shù)據(jù)庫中表進(jìn)行查詢操作的具體步驟如下。 1 1向數(shù)據(jù)庫發(fā)送向數(shù)據(jù)庫發(fā)送SQLSQL查詢語句查詢語句 try Statement sql=con.createStatement(); catch(SQLException e ) 2處理查詢結(jié)果處理查詢結(jié)果 ResultSet rs=sql.executeQuery(SELECT * FROM employee); 表表11.1給了出了給了出了ResultSet對(duì)象的若干方法。對(duì)象的若干方法。注:無論字段是何種屬性,總可以使用注:無論字段是何種屬性,總可以使用 getString(int columnInd

11、ex)或或getString(String columnName)方法方法返回字段值的串表示。返回字段值的串表示。注:當(dāng)使用注:當(dāng)使用ResultSet的的getXXX方法查看一行記錄時(shí),不可以顛方法查看一行記錄時(shí),不可以顛倒字段的順序,例如,不可以倒字段的順序,例如,不可以 rs.getDouble(4); rs.getDate(3) 12表表11.1 11.1 ResultSetResultSet對(duì)象的若干方法對(duì)象的若干方法1311.4.1 順序查詢順序查詢 通過使用通過使用JDBC提供的提供的API,可以在查詢之前知道表可以在查詢之前知道表中的字段的個(gè)數(shù)和名字,步驟如下:中的字段的個(gè)數(shù)和

12、名字,步驟如下: 1.連接對(duì)象con調(diào)用getMetaData()方法可以返回一個(gè)DatabaseMetaData對(duì)象,例如: DatabaseMetaData metadata=con.getMetaData(); 2. Metadata對(duì)象再調(diào)用getColumns可以將表的字段信息以行列的形式存儲(chǔ)在一個(gè)ResultSet對(duì)象中,例如: ResultSet tableMessage= metadata.getColumns(null,null,employee,null); 3. tableMessage對(duì)象調(diào)用next方法使游標(biāo)向下移動(dòng)一行(游標(biāo)的初始位置在第1行之前),然后tableM

13、essage調(diào)用getXXX方法可以查看該行中列的信息,其中最重要的信息是第4列,該列上的信息為字段的名字。 表表11.2 tableMessagetableMessage對(duì)象的格式對(duì)象的格式 例例11-2 Example11_2.java , Query.java 14表表11.2 11.2 tableMessagetableMessage對(duì)象的格式對(duì)象的格式 15例例11-2例例11-2 Example11_2.java , Query.java 1611.4.2 控制游標(biāo)控制游標(biāo) 需要在結(jié)果集中前后移動(dòng)、顯示結(jié)果集指定的一條記錄或隨需要在結(jié)果集中前后移動(dòng)、顯示結(jié)果集指定的一條記錄或隨機(jī)顯

14、示若干條記錄等。這時(shí),必須要返回一個(gè)可滾動(dòng)的結(jié)果集。機(jī)顯示若干條記錄等。這時(shí),必須要返回一個(gè)可滾動(dòng)的結(jié)果集。為了得到一個(gè)可滾動(dòng)的結(jié)果集,需使用下述方法先獲得一個(gè)為了得到一個(gè)可滾動(dòng)的結(jié)果集,需使用下述方法先獲得一個(gè)Statement對(duì)象:對(duì)象:Statement stmt=con.createStatement(int type ,int concurrency); 然后,根據(jù)參數(shù)的然后,根據(jù)參數(shù)的type、concurrency的取值情況的取值情況( (p211)p211),stmt返回相應(yīng)類型的結(jié)果集:返回相應(yīng)類型的結(jié)果集: ResultSet re=stmt.executeQuery(SQ

15、L語句語句); 滾動(dòng)查詢經(jīng)常用到滾動(dòng)查詢經(jīng)常用到ResultSet的下述方法:的下述方法:public boolean previous():將游標(biāo)向上移動(dòng)public void beforeFirst():將游標(biāo)移動(dòng)到結(jié)果集的初始位置。public void afterLast():將游標(biāo)移到結(jié)果集最后一行之后。public void first():將游標(biāo)移到結(jié)果集的第一行。public void last():將游標(biāo)移到結(jié)果集的最后一行。public boolean isAfterLast():判斷游標(biāo)是否在最后一行之后。public boolean isBeforeFirst():判斷

16、游標(biāo)是否在第一行之前public boolean ifFirst():判斷游標(biāo)是否指向結(jié)果集的第一行。public boolean isLast():判斷游標(biāo)是否指向結(jié)果集的最后一行。public int getRow():得到當(dāng)前游標(biāo)所指行的行號(hào).0public boolean absolute(int row):將游標(biāo)移到參數(shù)row指定的行號(hào)。17例例11-3Example11_3.java 1811.4.3 條件查詢條件查詢 在下面的例在下面的例11-411-4中使用了例中使用了例11-211-2中的中的QueryQuery類,分類,分別按商品號(hào)和價(jià)格查詢記錄。主類將查詢條件傳遞經(jīng)別按商

17、品號(hào)和價(jià)格查詢記錄。主類將查詢條件傳遞經(jīng)QueryQuery類的實(shí)例。程序運(yùn)行效果如圖類的實(shí)例。程序運(yùn)行效果如圖11.1311.13所示。所示。 例例11-4 Example11_4.java , Query.java 1911.4.4 排序查詢排序查詢 可以在SQL語句中使用ORDER BY子語句,對(duì)記錄排序 。 按薪水排序查詢的SQL語句: SELECT * FROM goods ORDER BY price例例11-5 Example11_5.java , Query.java 2011.4.5 模糊查詢模糊查詢 可以用SQL語句操作符LIKE進(jìn)行模式般配,使用“%”代替0個(gè)或多個(gè)字符,

18、用一個(gè)下劃線“_”代替1個(gè)字符。下述語句查詢商品名稱中含有“T”或“寶”的記錄: rs=sql.executeQuery(“SELECT * FROM goods WHERE name LIKE T寶寶% ”); 例例11-6 Example11_6.java , Query.java 2111.5 更新、添加與刪除操作更新、添加與刪除操作 Statement Statement對(duì)象對(duì)象調(diào)用方法:調(diào)用方法: public int executeUpdate(String sqlStatement); 通過參數(shù)通過參數(shù)sqlStatementsqlStatement指定的方式實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表中記錄

19、的指定的方式實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表中記錄的更新、添加和刪除操作。更新、添加和刪除操作。 更新、添加和刪除記錄的更新、添加和刪除記錄的SQLSQL語法分別是:語法分別是: UPDATE SET = 新值新值 WHERE 例:例:UPDATE goods SET price =3009 WHERE name=海爾電視機(jī)海爾電視機(jī)。 INSERT INTO 表表(字段列表字段列表) VALUES (對(duì)應(yīng)的具體的記錄)或?qū)?yīng)的具體的記錄)或INSERT INTO 表表(VALUES (對(duì)應(yīng)的具體的記錄)對(duì)應(yīng)的具體的記錄) 例:例:INSERT INTO goods(number,name,madeTime,p

20、rice) VALUES (A009,手機(jī)手機(jī), 2010-12-20,3976) DELETE FROM WHERE 例子例子 DELETE FROM goods WHERE number = B002 例例11-7 Example11_7.java , ModifyTable.java 2211.6 使用預(yù)處理語句使用預(yù)處理語句 Java提供了更高效率的數(shù)據(jù)庫操作機(jī)制,就是PreparedStatement對(duì)象,該對(duì)象被習(xí)慣地稱作預(yù)處理語句對(duì)象。 2311.6.1 預(yù)處理語句優(yōu)點(diǎn)預(yù)處理語句優(yōu)點(diǎn) 預(yù)處理預(yù)處理不僅減輕了數(shù)據(jù)庫的負(fù)擔(dān),而且也提高了訪問數(shù)據(jù)庫的速度。 對(duì)于JDBC,如果使用Con

21、nection和某個(gè)數(shù)據(jù)庫建立了連接對(duì)象con,那么con就可以調(diào)用prepareStatement(String sql)方法對(duì)參數(shù)sql指定的SQL語句進(jìn)行預(yù)編譯處理,生成該數(shù)據(jù)庫地層的內(nèi)部命令,并將該命令封裝在PreparedStatement對(duì)象對(duì)象中,那么該對(duì)象調(diào)用下列方法都可以使得該地層內(nèi)部命令被數(shù)據(jù)庫執(zhí)行 ResultSet executeQuery() ; boolean execute(); int executeUpdate(); 只要編譯好了PreparedStatement對(duì)象,那么該對(duì)象可以隨時(shí)地執(zhí)行上述方法,顯然提高了訪問數(shù)據(jù)庫的速度。 例例11-8 Example

22、11_8.java , PrepareQuery.java2411.6.2 使用統(tǒng)配符使用統(tǒng)配符 在對(duì)SQL進(jìn)行預(yù)處理時(shí)可以使用統(tǒng)配符“?”來代替字段的值,只要在預(yù)處理語句執(zhí)行之前再設(shè)置統(tǒng)配符所表示的具體值即可。例如:sql=con.prepareStatement(SELECT * FROM employee WHERE salary ? );那么在sql對(duì)象執(zhí)行之前,必須調(diào)用相應(yīng)的方法設(shè)置統(tǒng)配符“?”代表的具體值,比如: sql.setFloat(1,76.98 ); 指定上述預(yù)處理SQL語句中統(tǒng)配符“?”代表的值是76.98 預(yù)處理語句設(shè)置統(tǒng)配符“?”的值的常用方法有: void set

23、Date(int parameterIndex,Date x) void setDouble(int parameterIndex,double x) void setFloat(int parameterIndex,float x) void setInt(int parameterIndex,int x) void setLong(int parameterIndex,long x) void setString(int parameterIndex,String x) 例例11-9 Example11_9.java , AddRecord.java 2511.7 事務(wù)事務(wù) 11.7.1

24、事務(wù)及處理事務(wù)及處理 事務(wù)由一組事務(wù)由一組SQLSQL語句組成,所謂事務(wù)處理是指:語句組成,所謂事務(wù)處理是指:應(yīng)用程序保證事務(wù)中的應(yīng)用程序保證事務(wù)中的SQLSQL語句要么全部都執(zhí)行,語句要么全部都執(zhí)行,要么一個(gè)都不執(zhí)行。要么一個(gè)都不執(zhí)行。 事務(wù)處理是保證數(shù)據(jù)庫中數(shù)據(jù)完整性與一致事務(wù)處理是保證數(shù)據(jù)庫中數(shù)據(jù)完整性與一致性的重要機(jī)制。性的重要機(jī)制。 2611.7.2 JDBCJDBC事務(wù)處理步驟事務(wù)處理步驟 1 1使用setAutoCommit(boolean autoCommit)方法 和數(shù)據(jù)庫建立一個(gè)連接對(duì)象后,比如con。那么con的提交模式是自動(dòng)提交模式,為了能進(jìn)行事務(wù)處理,必須關(guān)閉con的這個(gè)默認(rèn)設(shè)置。con.setAutoCommit(false); 2 2使用commit()方法 連接對(duì)象con調(diào)用commit()方法就是讓事務(wù)中的SQL語句全部生效。 3 3使用rollback()方法 con調(diào)用rollback()方法的作用是撤消事務(wù)中成功執(zhí)行過的SQL語句對(duì)數(shù)據(jù)庫數(shù)據(jù)所做的更新、插入或刪除操作,即撤消引起數(shù)據(jù)發(fā)生變化的SQL語句操作,將數(shù)據(jù)庫中的數(shù)據(jù)恢復(fù)到commit(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論