




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java語言程序設計第八章JDBC編程JDBC驅動程序Java數(shù)據(jù)庫程序設計基本模型Java程序數(shù)據(jù)庫本章總體綱要1、JDBC基本概念2、JDBC常用API介紹3、JDBC編程步驟4、JDBC進行數(shù)據(jù)管理5、單元測試6、事務7、綜合項目——銀行管理系統(tǒng)8-1JDBC編程初識1、JDBC概述2、JDBC編程API介紹
(1)DriverManager(2)Connection
(3)Statement
(4)PreparedStatement(5)ResultSet
(6)ResultSetMetaData3、JDBC編程步驟4、DBMS下數(shù)據(jù)的操作JDBC簡介全稱:JavaDataBaseConnectivity為多種關系數(shù)據(jù)庫提供統(tǒng)一的訪問一次編寫、處處運行Java程序JDBCMySQLSQLServerOracle6JDBC連接不同數(shù)據(jù)庫的JAR包用JAVA語言實現(xiàn)與數(shù)據(jù)庫的交互,是直接訪問數(shù)據(jù)庫,執(zhí)行效率高。MySQLmysql-connector-java-5.1.40-bin.jarOracleojdbc.jarojdbc14.jar
ojdbc5.jar和ojdbc6.jarSQLServersqljdbc.jarsqljdbc4.jarjava.lang.ClassforName(StringclassName):返回與給定字符串名的類或接口
相關聯(lián)的Class對象?!虞dJDBC驅動時使用java.sql.DriverManager:管理JDBC驅動的服務類publicstaticsynchronizedConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsException:獲得url對應的數(shù)據(jù)庫的連接。JDBCAPI介紹JDBCAPI介紹java.sql.Connection接口常用方法StatementcreateStatementthrowsSQLException:返回一個Statement對象。PreparedStatementprepareStatement(Stringsql)throwsSQLException:返回預編譯的Statement對象,即:將SQL語句提交到數(shù)據(jù)庫進行預編譯。CallableStatementprepareCall(Stringsql)throwsSQLException:返回CallableStatement對象,該對象用于存儲過程的調用。java.sql.Connection接口控制事務的方法voidsetAutoCommit(booleanautoCommit):
關閉自動提交,打開事務voidcommit():提交事務voidrollback():回滾事務JDBCAPI介紹java.sql.Statement接口:用于執(zhí)行SQL語句。包括:DDL、DCL、DML、SQL查詢,當執(zhí)行查詢語句時返回結果集ResultSetexecuteQuery(Stringsql)throwsSQLException:執(zhí)行查詢語句intexecuteUpdate(Stringsql)throwsSQLException執(zhí)行數(shù)據(jù)操作語言(DML)語句,如INSERT、UPDATE或DELETE,返回受影響的行數(shù);執(zhí)行數(shù)據(jù)庫定義語言(DDL)語句,如:創(chuàng)建數(shù)據(jù)庫、創(chuàng)建刪除表等等,返回0。booleanexecute(Stringsql)throwsSQLException:執(zhí)行任何SQL語句執(zhí)行后,第一個結果如果是ResultSet對象,則返回true;執(zhí)行后,第一個結果如果為受影響的行數(shù)或沒有任何結果,則返回false。JDBCAPI介紹java.sql.PreparedStatement接口:預編譯的statement對象。它是Statement的子接口允許數(shù)據(jù)庫預編譯SQL語句,通常SQL語句帶參數(shù)。執(zhí)行時
每次改變SQL命令的參數(shù),避免數(shù)據(jù)庫每次編譯SQL語句,執(zhí)行性能好。在執(zhí)行前,需要為編譯的SQL語句傳入?yún)?shù)值voidsetXxx(intindex,value)根據(jù)傳入?yún)?shù)值的類型不同,使用不同的方法。傳入值的類型根據(jù)SQL語句參數(shù)而定。JDBCAPI介紹java.sql.ResultSet接口:定義結果集對象voidclose()throwsSQLException:釋放、關閉ResultSet對象voidbeforeFisrt():將記錄指針定位到首行之前,這是記錄指針的初始狀態(tài)。voidafterLast():將ResultSet的記錄指針定位到最后一行之后。booleanabsolute
(introw):將結果集移動到第幾行。(row是負數(shù),移動到倒數(shù)第幾行)booleanfirst():將ResultSet的記錄指針定位到首行。booleanprevious():將ResultSet的記錄指針定位到上一行。booleannext():將ResultSet的記錄指針定位到下一行。booleanlast():將ResultSet的記錄指針定位到最后一行。如果移動后的記錄指針指向一條有效記錄,則返回true。JDBC編程步驟連接數(shù)據(jù)庫DriverManager.getConnection(url,user,password)con創(chuàng)建SQL語句執(zhí)行對象con.createStatement或con.preparedStatement執(zhí)行SQL語句,進行數(shù)據(jù)處理st.executeUpate或st.executeQuery需要繼續(xù)處理數(shù)據(jù)關閉SQL語句執(zhí)行對象st.close關閉連接con.close程序結束加載數(shù)據(jù)庫驅動Class.forName(…)程序開始8-2MySQL數(shù)據(jù)庫操作的常用sql命令1、創(chuàng)建表2、對表中的數(shù)據(jù)進行管理(1)增加記錄(2)刪除記錄(3)修改記錄(4)查詢記錄開發(fā)環(huán)境及開發(fā)工具1、集成開發(fā)工具IDEEclipse(數(shù)據(jù)訪問層、業(yè)務邏輯層)NetBeans(表示層)2、數(shù)據(jù)庫選用數(shù)據(jù)庫:MySQL開發(fā)工具:USBWebServer+Navicat3、JDBC連接驅動mysql-connector-java-5.1.18-bin.jarSQL帳號:root密碼:usbw8-4PreparedStatement的使用1、PreparedStatement代替Statement對數(shù)據(jù)進行操作2、PreparedStatement的優(yōu)勢Statement和PreparedStatement比較1、Statementcon.createStatement()stStringsql=“……….”;st.executeUpdate(sql);st.executeQuery(sql);st.execute(sql);2、PreparedStatementStringsql=“……(?,?)….”;con.preparedStatement(sql)pstpst.setInt(1,..);pst.setString(2,..);pst.executeUpdate(sql);pst.executeQuery(sql);pst.execute(sql);使用PreparedStatement的好處PreparedStatement接口,它繼承自Statement。PreparedStatement提高SQL語句執(zhí)行的性能。PreparedStatement實例包含已編譯的SQL語句。極大地提高SQL語句執(zhí)行的安全性,防止SQL注入。8-5數(shù)據(jù)庫操作封裝類1、面向對象代替面向過程2、把表的操作封裝成類8-6單元測試1、Junit單元測試8-6單元測試1、Junit單元測試8-7對數(shù)據(jù)庫操作類升級改造1、提取父類、設計子類2、面向接口的編程8-8事務管理1、什么是事務2、事務的編程舉例什么是事務事務:指邏輯上的一組操作,組成這組操作的各個單元,要么全部成功,要么全部失敗。例如:A賬戶向B賬戶轉帳100元
updateaccountsetmoney=money-100wherename='A';updateaccountsetmoney=money+100wherename='B';JDBC對事務的管理當JDBC獲得數(shù)據(jù)庫連接對象時,默認會自動向數(shù)據(jù)庫提交它發(fā)送的SQL語句。connection.setAutoCommit(false);//不自動提交,開啟事務mit();//提交事務connection.rollback();//回滾事務8-8-1MySQL數(shù)據(jù)庫操作的常用sql命令用JDBC+GUI實現(xiàn)功能:1、開戶、銷戶2、存錢、取錢3、轉賬4、查詢賬戶5、日志記錄與日志查詢業(yè)務描述與涉及到的數(shù)據(jù)信息1、開戶、銷戶2、存錢、取錢3、轉賬4、查詢賬戶5、日志記錄6、日志查詢在銀行里開啟一個賬戶或注銷一個賬戶在賬戶里,根據(jù)賬戶標識修改賬戶的金額A賬戶向B賬戶轉某金額查詢賬戶的所有信息賬戶的金額發(fā)生變化時,記錄賬戶日志查詢日志的所有信息簡易銀行管理系統(tǒng)——數(shù)據(jù)分析1、賬戶表account含義字段名稱數(shù)據(jù)類型約束賬戶標識accidint主鍵,自增賬戶名稱namevarchar(30)非空賬戶金額moneydouble非空2、日志表log
含義字段名稱數(shù)據(jù)類型約束日志標識logidint
主鍵,自增賬戶標識
accid
int
非空,外部鍵賬戶金額moneydouble非空記錄時間date
datetime非空簡易銀行管理系統(tǒng)——數(shù)據(jù)分析1、賬戶表account含義字段名稱數(shù)據(jù)類型約束賬戶標識accidint主鍵,自增賬戶名稱namevarchar(30)非空賬戶金額moneydouble非空2、日志表log
含義字段名稱數(shù)據(jù)類型約束日志標識logidint
主鍵,自增賬戶標識
accid
int
非空,外部鍵賬戶名稱
namevarchar(30)
非空賬戶金額moneydouble非空記錄時間date
datetime非空AccountintaccidStringnamedoublemoneyLogintlogidintaccidStringnamedoublemoneyStringdate簡易銀行管理系統(tǒng)—所涉及的技術點和知識點技術點:單元測試三層架構體系事務管理綜合運用前面所學的知識點:
JDBC+GUI類和對象、繼承和多態(tài)常用類、集合框架異常處理單元測試單元測試是編寫測試代碼,用來保證程序基本模塊的正確性。
JUnit是Java單元測試框架。JUnit4通過注解的方式來識別測試方法。目前支持的主要注解有:@BeforeClass全局只會執(zhí)行一次,而且是第一個運行@Before在測試方法運行之前運行@Test測試方法@After在測試方法運行之后運行@AfterClass全局只會執(zhí)行一次,而且是最后一個運行@Ignore忽略此方法三層架構體系表示層(UI)業(yè)務邏輯層(BLL)數(shù)據(jù)訪問層(DAL)MySQLOracleSQLServer三層架構(3-tierapplication):表現(xiàn)層(UI)業(yè)務邏輯層(BLL)數(shù)據(jù)訪問層(DAL)區(qū)分層次的目的高內聚,低耦合展現(xiàn)給用戶的界面對數(shù)據(jù)業(yè)務邏輯處理直接操作數(shù)據(jù)庫,對數(shù)據(jù)的CRUD操作……事務管理事務:指邏輯上的一組操作,這組操作的各個單元,要么全部成功,要么全部不成功。例如:A向B轉帳
updatefromaccountsetmoney=money+100whereaccid=100;
updatefromaccountsetmoney=money-100whereaccid=200;當JDBC程序從數(shù)據(jù)庫獲得Connection對象時,默認會自動向數(shù)據(jù)庫提交SQL語句。使用如下語句控制JDBC事務:connection.setAutoCommit(false);//設置事務提交方式為不自動提交mit();//提交事務connection.rollback();//回滾事務簡易銀行管理系統(tǒng)——業(yè)務分析(開戶)業(yè)務功能開戶、銷戶存錢、取錢轉賬查詢賬戶(全部和單個)賬戶金額若發(fā)生變動,用日志記錄賬戶現(xiàn)有金額查詢所有日志業(yè)務邏輯分析開戶業(yè)務:向account表中增加一條記錄(accid自增;name和money由用戶輸入)向log表中增加一條記錄(logid自增;accid、name、money與上同,date取系統(tǒng)當前時間)簡易銀行管理系統(tǒng)——業(yè)務分析(銷戶)業(yè)務功能開戶、銷戶存錢、取錢轉賬查詢賬戶(全部和單個)賬戶金額若發(fā)生變動,用日志記錄賬戶現(xiàn)有金額查詢所有日志業(yè)務邏輯分析銷戶業(yè)務:取錢(查詢賬戶、取錢、日志記錄)、刪除用戶從account表根據(jù)accid列查詢賬戶信息(重點關注金額currentMoney)在account表中修改記錄,根據(jù)accid將money列數(shù)值減少currentMoney從account表中按accid列刪除一條記錄向log表中增加一條記錄(logid自增;accid、name與上同;money為0;
date取系統(tǒng)當前時間)簡易銀行管理系統(tǒng)——業(yè)務分析(存錢)業(yè)務功能開戶、銷戶存錢、取錢轉賬查詢賬戶(全部和單個)賬戶金額若發(fā)生變動,用日志記錄賬戶現(xiàn)有金額查詢所有日志業(yè)務邏輯分析存錢業(yè)務:在account表中查詢一條記錄,根據(jù)accid列的值,得到賬戶信息。在account表中修改一條記錄,根據(jù)accid列的值,修改money列的數(shù)值,增加value元。向log表中增加一條記錄(logid自增;accid與上同;name與money取自于賬戶[金額+value];date取系統(tǒng)當前時間)簡易銀行管理系統(tǒng)——業(yè)務分析(取錢)業(yè)務功能開戶、銷戶存錢、取錢轉賬查詢賬戶(全部和單個)賬戶金額若發(fā)生變動,用日志記錄賬戶現(xiàn)有金額查詢所有日志業(yè)務邏輯分析取錢業(yè)務:在account表中查詢一條記錄,根據(jù)accid列的值,得到賬戶信息。在account表中修改一條記錄,根據(jù)accid列的值,修改money列的數(shù)值,減少value元。向log表中增加一條記錄(logid自增;accid與上同;name與money取自于賬戶[金額-value];date取系統(tǒng)當前時間)簡易銀行管理系統(tǒng)——業(yè)務分析(轉賬)業(yè)務功能開戶、銷戶存錢、取錢轉賬查詢賬戶(全部和單個)賬戶金額若發(fā)生變動,用日志記錄賬戶現(xiàn)有金額查詢所有日志業(yè)務邏輯分析轉賬業(yè)務:A(accidOut)B(accidIn)value元在account表中查詢2條記錄,根據(jù)accidOut和accidIn的值,得到賬戶信息。在account表中修改2條記錄,A賬戶減value元;B賬戶增加value元。(用事務來實現(xiàn))向log表中增加2條記錄(logid自增;accid分別為:
accidIn或accidOut;name與money取自于賬戶金額變化value元;date取系統(tǒng)當前時間)簡易銀行管理系統(tǒng)——業(yè)務分析(查詢賬戶)業(yè)務功能開戶、銷戶存錢、取錢轉賬查詢賬戶(全部和單個)賬戶金額若發(fā)生變動,用日志記錄賬戶現(xiàn)有金額查詢所有日志業(yè)務邏輯分析查詢所有賬戶業(yè)務:在account表中查詢所有記錄,封裝成賬戶集合。查詢單個賬戶業(yè)務:在account表中查詢一條記錄,根據(jù)accid查詢賬戶信息,封裝成賬戶對象。簡易銀行管理系統(tǒng)——業(yè)務分析(查詢日志)業(yè)務功能開戶、銷戶存錢、取錢轉賬查詢賬戶(全部和單個)賬戶金額若發(fā)生變動,用日志記錄賬戶現(xiàn)有金額查詢所有日志業(yè)務邏輯分析查詢所有日志業(yè)務:在log表中查詢所有日志,封裝成日志集合。簡易銀行管理系統(tǒng)——DAO層數(shù)據(jù)操作分析account表操作:[開戶]
向account表中增加一條記錄(id自增、name和money由用戶輸入)[銷戶、存取錢、轉賬]從account表根據(jù)accid列查詢賬戶信息[銷戶、存取錢]在account表中修改一條記錄,根據(jù)accid減少money列value元[銷戶]
從account表中刪除一條記錄,按accid列刪除[查詢所有賬戶]在account表中查詢所有記錄,封裝成賬戶集合[轉賬]在account表中修改2條記錄,根據(jù)accid減少money列value元AccountDao:publicintaddAccount(Accountac)publicAccountselectById(intaccid)publicintupdateAccount(intaccid,doublevalue)publicintdeleteAccount(intaccid)publicList<Account>selectAllAccounts()publicintturnMoney(intaccidOut,intaccidIn,doublevalue)簡易銀行管理系統(tǒng)——DAO層操作分析log表操作:[開戶、銷戶、存取錢、轉賬]
向log表中增加一條記錄
id自增;accid,name,money與account表的數(shù)據(jù)保持一致;date取系統(tǒng)當前時間[查詢所有日志]
從log表中查詢所有記錄,封裝成日志集合也可以增加查詢條件:介于某段時間之間LogDao:publicintaddLog(Loglog)publicList<Log>selectAllLogs()簡易銀行管理系統(tǒng)——業(yè)務層操作分析銀行業(yè)務:開戶銷戶存錢取錢轉賬查詢所有賬戶查詢所有日志BankBiz:publicbooleanopenAccout(Accountac)publicbooleandelAccount(intaccid)publicbooleansaveMoney(intaccid,doublevalue)publicbooleanfetchMoney(intaccid,doublevalue)publicbooleanturnMoney(intaccidOut,intaccidIn,doublevalue)publicList<Account>selectAllAccounts()publicList<Log>selectAllLogs()實現(xiàn)步驟概述1、創(chuàng)建數(shù)據(jù)庫bank及2個表:account和log2、新建JAVA項目,配置數(shù)據(jù)庫開發(fā)環(huán)境3、建立幾個包,搭建項目框架cn.sdut.aview——表示層——業(yè)務邏輯層cn.sdut.dao——數(shù)據(jù)訪問層cn.sdut.po——實體,各層都會用到cn.sdut.util——工具包4、在po中創(chuàng)建2個實體類Account和Log5、在dao層中創(chuàng)建類:BaseDao,用于存放數(shù)據(jù)庫訪問共同的代碼AccountDao,用于對賬戶表進行操作LogDao,用于對日志表進行操作6、在biz層創(chuàng)建BankBiz,用于對銀行業(yè)務進行操作7、在表示層aView創(chuàng)建主類,對各項業(yè)務進行訪問8、在NetBeans中引入項目,進行界面設計9、業(yè)務功能利用GUI窗口模式的逐步實現(xiàn)重新認識三層架構體系表示層(UI)業(yè)務邏輯層(BLL)數(shù)據(jù)訪問層(DAL)MySQLOracleSQLServer展現(xiàn)給用戶的界面對業(yè)務邏輯進行處理對數(shù)據(jù)的CRUD操作……AccountDaointaddAccount(Accountaccount)intdeleteAccount(intaccid)intupdateAccount(intaccid,doublevalue)AccountselectById(intaccid)List<Account>selectAll()intturnMoney(intaccidOut,intaccidIn,doublevalue)LogDaointaddLog(Loglog)List<Log>selectAll()BankBizbooleanopenAccount(Accountaccount)throwsInputValueException;booleandelAccount(intaccid)throws
NoSuchAccountException,…..booleansaveMoney(intaccid,doublevalue)throws
NoSuchAccount….booleanfetchMoney(intaccid,doublevalue)throws
NoSuchAccount....booleanturnMoney(intaccidOut,intaccidIn,doublevalue)throws
…List<Account>s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSM 0055-2024“領跑者”評價技術要求 燒結釹鐵硼永磁材料
- 2025年度資質借用與投標環(huán)境保護合作協(xié)議
- 二零二五年度智能交通管理系統(tǒng)單方解除合同
- 2025年度跨海大橋旋挖灌注樁施工合同
- 二零二五年度防盜門市場調研與采購合作協(xié)議
- 二零二五年度生物技術專利申請合作協(xié)議
- 二零二五年度體育健身公司聘用兼職教練合同書
- 二零二五年度勞務派遣公司勞動合同范本(含合同解除與賠償)
- 四川省2025年度房屋租賃租賃合同解除與終止合同
- 二零二五年度消費金融貸款連帶保證合同書
- 大格子作文紙模板
- 中考物理一輪復習策略與方法
- 祥云財富工業(yè)園區(qū)新建鐵路專用線工程環(huán)評報告
- 藥店換證材料
- 移動商務基礎(吳洪貴)課件 第二章 探秘移動技術
- 動畫劇本創(chuàng)作課件
- 【企業(yè)會計信息化存在的問題及解決對策開題報告】
- 痘痘肌膚的各種類型
- (完整版)設計管理
- 中國嚴重膿毒癥膿毒性休克治療指南2023年
- 材料性能學(第2版)付華課件0-緒論-材料性能學
評論
0/150
提交評論