




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第 9 章 補(bǔ)充案例案例 9-1使用 JDBC 完成數(shù)據(jù)的增刪改查一、案例描述1、 考核知識(shí)點(diǎn)名稱:使用 JDBC 完成數(shù)據(jù)的增刪改查:0280090062、 練習(xí)目標(biāo)掌握 JDBC 常用接口的使用掌握 PreparedSement 對(duì)象的使用掌握 ResultSet 對(duì)象的使用3、 需求分析Sement 對(duì)象每次執(zhí)行SQL 語句時(shí),都會(huì)對(duì)其進(jìn)行編譯。當(dāng)相同的SQL 語句執(zhí)行多次時(shí),Sement對(duì)象就會(huì)使數(shù)據(jù)庫頻繁編譯相同的 SQL 語句,從而降低數(shù)據(jù)庫的效率。為了解決這個(gè)問題,Sement 提供了一個(gè)子類 PreparedSement。PreparedSement 對(duì)象可以對(duì) SQL 語句進(jìn)
2、行預(yù)編譯,預(yù)編譯的信息會(huì)在 PreparedSement 對(duì)象中。當(dāng)相同的 SQL 語句再次執(zhí)行時(shí),程序會(huì)使用PreparedSement 對(duì)象中的數(shù)據(jù),而不需要對(duì) SQL 語句再次編譯去查詢數(shù)據(jù)庫,這樣就大大的提高了數(shù)據(jù)的效率。接下來,本案例將使用 PreparedSement 對(duì)象來完成對(duì)數(shù)據(jù)的增刪改查操作。4、 設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)2)3)4)5)創(chuàng)建一個(gè)用于封裝數(shù)據(jù)的 JavaBean。將加載驅(qū)動(dòng)和獲取數(shù)據(jù)連接等操作封裝在一個(gè)工具類中,以供其他類調(diào)用。創(chuàng)建一個(gè)實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫添刪改查操作的分別創(chuàng)建用于執(zhí)行對(duì)數(shù)據(jù)表添刪改查操作的測(cè)試類。執(zhí)行程序,。二、案例實(shí)現(xiàn)1創(chuàng)建 JavaBean創(chuàng)
3、建一個(gè)用于保存用戶數(shù)據(jù)的 User 類,User 類的具體實(shí)現(xiàn)方式如下所示。import java.util.Date; public claser privateid;private String username; private String password; private String; private Date birthday;/此處省略各屬性的getter/setter 方法2創(chuàng)建工具類由于每次操作數(shù)據(jù)庫時(shí),都需要加載數(shù)據(jù)庫驅(qū)動(dòng)、建立數(shù)據(jù)庫連接以及關(guān)閉數(shù)據(jù)庫連接,為了避免代碼的重復(fù)書寫,下面建立一個(gè)專門用于數(shù)據(jù)庫相關(guān)操作的工具類 JDBCUtils,JDBCUtils 的具體
4、實(shí)現(xiàn)方式如下所示。import java.sql.*; public class JDBCUtils / 加載驅(qū)動(dòng),并建立數(shù)據(jù)庫連接public sic Connection getConnection() throws SQLException, ClaotFoundException Class.forName(com.jdbc.Driver);String url = jdbc:/localhost:3306/jdbc; String username = root;String password = ;Connection conn = DriverManager.getConnect
5、ion(url, username, password); return conn;/ 關(guān)閉數(shù)據(jù)庫連接,資源public sic void release(PreparedSement prestmt, Connection conn, ResultSet rs) if (prestmt != null) try prestmt.close(); catch (SQLException e) e.prStackTrace();prestmt = null;if (conn != null) try conn.close(); catch (SQLException e) e.prStackTr
6、ace();conn = null;if (rs != null) try rs.close(); catch (SQLException e) e.prStackTrace();rs = null;3創(chuàng)建創(chuàng)建一個(gè)名稱為 Users現(xiàn)方式如下所示。的類,該類中封裝了對(duì)表 users 的添加、查詢、刪除和更新等操作,具體實(shí)import java.sql.*;import java.text.SimpleDateFormat; import java.util.ArrayList;public clasers/ 添加用戶的操作publicinsert(User user) Connection c
7、onn = null;PreparedSement prestmt = null; ResultSet rs = null;try / 獲得數(shù)據(jù)的連接conn = JDBCUtils.getConnection();/ 發(fā)送SQL 語句SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd); String birthday = sdf.format(user.getBirthday();String sql = INSERTO users(id,name,password,birthday) + VALUES( + user.getId(
8、) + , + user.getUsername()+ , + user.getPassword() + , + user.get()+ , + birthday + ); prestmt = conn.prepareSement(sql);num = prestmt.executeUpdate(); if (num 0) return true;return false; catch (Exception e) e.prStackTrace(); finally JDBCUtils.release(prestmt, conn, rs);return false;/ 查詢所有的User 對(duì)象p
9、ublic ArrayList findAll() Connection conn = null;PreparedSement prestmt = null; ResultSet rs = null;ArrayList list = new ArrayList(); try / 獲得數(shù)據(jù)的連接conn = JDBCUtils.getConnection();/ 發(fā)送SQL 語句String sql = SELECT * FROM users;prestmt = conn.prepareSement(sql);rs = prestmt.executeQuery();/ 處理結(jié)果集while (r
10、s.next() User user = new User();user.setId(rs.get(id);user.setUsername(rs.getString(name);user.setPassword(rs.getString(password);user.set(rs.getString();user.setBirthday(rs.getDate(birthday);list.add(user);return list; catch (Exception e) e.prStackTrace(); finally JDBCUtils.release(prestmt, conn, r
11、s);return null;/ 根據(jù)id 查找指定的user public User find(id) Connection conn = null;PreparedSement prestmt = null; ResultSet rs = null;try / 獲得數(shù)據(jù)的連接conn = JDBCUtils.getConnection();/ 發(fā)送SQL 語句String sql = SELECT * FROM users WHEREid= + id;prestmt = conn.prepareSement(sql);rs = prestmt.executeQuery();/ 處理結(jié)果集w
12、hile (rs.next() User user = new User();user.setId(rs.get(id);user.setUsername(rs.getString(name);user.setPassword(rs.getString(password);user.set(rs.getString();user.setBirthday(rs.getDate(birthday);return user;return null; catch (Exception e) e.prStackTrace(); finally JDBCUtils.release(prestmt, con
13、n, rs);return null;/ 刪除用戶publicConnection PreparedSdelete(id) conn = null;ement prestmt = null;ResultSet rs = null; try / 獲得數(shù)據(jù)的連接conn = JDBCUtils.getConnection();/ 發(fā)送SQL 語句String sql = DELETE FROM users WHEREid=+id;prestmtnum if (num=conn.prepareSement(sql);prestmt.executeUpdate();0) return true;ret
14、urn false; catch (Exception e) e.prStackTrace(); finally JDBCUtils.release(prestmt, conn, rs);return false;/ 修改用戶publicConnection PreparedSupdate(User user) conn = null;ement prestmt = null;ResultSet rs = null; try / 獲得數(shù)據(jù)的連接conn = JDBCUtils.getConnection();/ 發(fā)送SQL 語句SimpleDateFormat sdf = new Simple
15、DateFormat(yyyy-MM-dd); String birthday = sdf.format(user.getBirthday();String sql = UPDATE users set name= + user.getUsername()4創(chuàng)建測(cè)試類(1)編寫測(cè)試類 JdbcInsertTest,實(shí)現(xiàn)向 users 表中添加一條數(shù)據(jù),其代碼如下所示。在運(yùn)行程序之前,先來查詢下 users 表中的數(shù)據(jù),如下圖所示。import java.util.Date; public class InsertUserTestpublic sic void main(String args)
16、 / 向users 表一個(gè)用戶信息 Usersud = new Users(); User user=new User();user.setId(5); user.setUsername(hym); user.setPassword(1234); user.set(); user.setBirthday(new Date();b=ud.insert(user); System.out.prln(b);+ ,password= + user.getPassword() + ,=+ user.get() + ,birthday= + birthday+ WHERE id= + user.getId
17、(); prestmt = conn.prepareSement(sql);num = prestmt.executeUpdate(); if (num 0) return true;return false; catch (Exception e) e.prStackTrace(); finally JDBCUtils.release(prestmt, conn, rs);return false;運(yùn)行程序后,如果控制臺(tái)的打印結(jié)果為 true,說明添加用戶信息的操作執(zhí)行成功了。這時(shí),再次查詢users 表,其查詢結(jié)果如下圖所示:圖9-1查詢結(jié)果從上圖的查詢結(jié)果可以看出,users 表中添加了
18、一條 name 為 hym 的數(shù)據(jù)。(2)編寫測(cè)試類 FindAllUsersTest,該類用于實(shí)現(xiàn)users 表中所有的數(shù)據(jù),其代碼如下所示。程序執(zhí)行后,控制臺(tái)會(huì)打印出 users 表中所有的 username 值,結(jié)果如下圖所示。(3)編寫測(cè)試類 FindUserByIdTest,該類實(shí)現(xiàn)了users 表中指定的數(shù)據(jù),其代碼如下所示。程序執(zhí)行后,控制臺(tái)會(huì)將 id 為 5 的User 對(duì)象的 name 值打印出來,結(jié)果如下圖所示。public class FindUserByIdTestpublic sic void main(String args) Usersusers= new Use
19、rs();User user = users.find(5);System.out.prln(id 為 5 的User 對(duì)象的name 值為:+user.getUsername();import java.util.ArrayList; public class FindAllUsersTest public sic void main(String args) / 創(chuàng)建一個(gè)名稱為users的對(duì)象Usersusers= new Users();/ 將Users對(duì)象的findAll()方法執(zhí)行后的結(jié)果放入list 集合ArrayList list = users.findAll();/ 循環(huán)輸出
20、集合中的數(shù)據(jù)for (i = 0; i list.size(); i+) System.out.prln(第 + (i + 1) + 條數(shù)據(jù)的 username 值為:+ list.get(i).getUsername();圖9-2運(yùn)行結(jié)果(4)編寫測(cè)試類 UpdateUserTest,該類實(shí)現(xiàn)了修改 users 表中數(shù)據(jù)的操作,具體代碼如下所示。執(zhí)行上傳程序后,如果控制臺(tái)打印結(jié)果為 true,說明已經(jīng)執(zhí)行了修改用戶信息的操作,這時(shí),再查看users 表,查詢結(jié)果如下圖所示:從上圖的查詢結(jié)果可以看出,id 為 5 的 User 對(duì)象的信息已經(jīng)發(fā)生了變化。(5)編寫測(cè)試類 DeleteUserTest,該類實(shí)現(xiàn)了刪除 users 表中數(shù)據(jù)的操作,其代碼如下所示。public class DeleteUserTestpublic sic void main(String args) / 刪除操作Usersusers= new Users(); b = use
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)技術(shù)升級(jí)服務(wù)支持協(xié)議
- 公司年度慶典儀式
- 教育培訓(xùn)行業(yè)師資力量保證合同協(xié)議
- 高二語文寫作教學(xué):新聞寫作
- 通知申請(qǐng)書模板
- 建筑行業(yè)施工安全責(zé)任及免責(zé)條款協(xié)議
- 金融租賃業(yè)務(wù)合作協(xié)議
- 獨(dú)家銷售代理權(quán)轉(zhuǎn)讓協(xié)議
- 公司合作協(xié)議書版
- 三農(nóng)行業(yè)標(biāo)準(zhǔn)化生產(chǎn)操作手冊(cè)
- 2025年阜新高等專科學(xué)校單招職業(yè)技能測(cè)試題庫審定版
- 大學(xué)生安全知識(shí)班會(huì)
- 課件圍術(shù)期下肢深靜脈血栓的預(yù)防與護(hù)理
- 2025年菏澤家政職業(yè)學(xué)院單招職業(yè)技能測(cè)試題庫完美版
- 《電力變壓器》課件
- 初級(jí)鐵路線路工技能鑒定考試題庫
- 2025年度建筑垃圾運(yùn)輸與再生資源回收一體化合同樣本
- 2024新人教版英語七下單詞默寫表(開學(xué)版)
- (2025)輔警招聘公安基礎(chǔ)知識(shí)必刷題庫及參考答案
- 農(nóng)業(yè)機(jī)械設(shè)備維護(hù)與質(zhì)量保障措施
- 基于圖像處理的CAD圖紙比對(duì)算法
評(píng)論
0/150
提交評(píng)論