Java程序設(shè)計教程(第三版)課件 項目十三 使用JDBC實現(xiàn)超市進(jìn)銷存管理_第1頁
Java程序設(shè)計教程(第三版)課件 項目十三 使用JDBC實現(xiàn)超市進(jìn)銷存管理_第2頁
Java程序設(shè)計教程(第三版)課件 項目十三 使用JDBC實現(xiàn)超市進(jìn)銷存管理_第3頁
Java程序設(shè)計教程(第三版)課件 項目十三 使用JDBC實現(xiàn)超市進(jìn)銷存管理_第4頁
Java程序設(shè)計教程(第三版)課件 項目十三 使用JDBC實現(xiàn)超市進(jìn)銷存管理_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目十三使用JDBC實現(xiàn)超市進(jìn)銷存管理采用JDBC實現(xiàn)超市進(jìn)銷存系統(tǒng),其功能包括商品的添加、刪除、修改、查詢等操作?!卷椖棵枋觥?/p>

1.JDBC編程環(huán)境的搭建。2.采用Statement完成數(shù)據(jù)庫的增刪改查。3.采用PreparedStatement完成數(shù)據(jù)庫的增刪改查?!救蝿?wù)分解】

任務(wù)一JDBC編程環(huán)境的搭建【任務(wù)描述】

在進(jìn)行數(shù)據(jù)庫開發(fā)之前,需要獲得不同數(shù)據(jù)庫環(huán)境下的JDBC數(shù)據(jù)庫連接。任務(wù)一集合類的選擇

【必備知識】1.JDBC簡介JDBC的全稱是JavaDataBaseConnectivity(java數(shù)據(jù)庫連接),它有兩個含義。首先,對于使用Java編寫數(shù)據(jù)庫訪問程序的程序員來說,JDBC是一組Java用于執(zhí)行SQL語句的API,Java程序通過JDBCAPI操作到關(guān)系數(shù)據(jù)庫,實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的查詢和更新。其次,對于各大數(shù)據(jù)庫廠商來說,JDBC為數(shù)據(jù)庫訪問提供了一個統(tǒng)一的接口標(biāo)準(zhǔn),不同的數(shù)據(jù)庫廠商都實現(xiàn)這個統(tǒng)一的接口。2.JDBC驅(qū)動程序JDBC為數(shù)據(jù)庫的廠商提供了一個統(tǒng)一的接口,是由各數(shù)據(jù)庫廠商根據(jù)各自不同的底層數(shù)據(jù)庫和中間件來設(shè)計接口的實現(xiàn)類,這些實現(xiàn)類就是JDBC驅(qū)動程序。常用的數(shù)據(jù)庫以及其JDBC驅(qū)動包見表13-1。任務(wù)一集合類的選擇

3.3.DriverManager類和Connection類DriverManager管理一組JDBC驅(qū)動程序的基本服務(wù)。所有Driver類都必須包含有一個靜態(tài)部分。它創(chuàng)建該類的實例,然后在加載該實例時DriverManager類進(jìn)行注冊。加載Driver類,然后自動在DriverManager中注冊的方式有兩種:通過調(diào)用方法Class.forName。這將顯式地加載驅(qū)動程序類。加載Driver類并在DriverManager類中注冊后,它們即可用來與數(shù)據(jù)庫建立連接。當(dāng)調(diào)用DriverManager.getConnection方法發(fā)出連接請求時,DriverManager將檢查每個驅(qū)動程序,查看它是否可以建立連接。任務(wù)一JDBC編程環(huán)境的搭建【解題思路】 程序員在使用JDBC編程的時候,只需要面向標(biāo)準(zhǔn)的JDBCAPI編程即可,通過在工程中引進(jìn)不同的數(shù)據(jù)庫驅(qū)動程序來使用不同的數(shù)據(jù)庫。搭建數(shù)據(jù)庫環(huán)境如下步驟:1、安裝MYSQL數(shù)據(jù)庫。2、設(shè)計超市進(jìn)銷存管理系統(tǒng)的數(shù)據(jù)庫。3、測試使用JDBC連接數(shù)據(jù)庫。4.常用的數(shù)據(jù)庫介紹(1)MySQL(2)SQLServer(3)OracleDatabase(4)DB25.常用的SQL語句舉例創(chuàng)建數(shù)據(jù)庫:CREATEDATABASEdatabase-name刪除數(shù)據(jù)庫:dropdatabasedbname創(chuàng)建新表:createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)刪除新表:droptabletabname增加一個列:Altertabletabnameaddcolumncoltype添加主鍵:Altertabletabnameaddprimarykey(col)刪除主鍵:Altertabletabnamedropprimarykey(col)創(chuàng)建索引:create[unique]indexidxnameontabname(col….)刪除索引:dropindexidxname創(chuàng)建視圖:createviewviewnameasselectstatement刪除視圖:dropviewviewname

幾個簡單的表的數(shù)據(jù)操作的sql語句:選擇:select*fromtable1where范圍插入:insertintotable1(field1,field2)values(value1,value2)刪除:deletefromtable1where范圍更新:updatetable1setfield1=value1where范圍查找:select*fromtable1wherefield1like’%value1%’排序:select*fromtable1orderbyfield1,field2[desc]總數(shù):selectcountastotalcountfromtable1求和:selectsum(field1)assumvaluefromtable1平均:selectavg(field1)asavgvaluefromtable1最大:selectmax(field1)asmaxvaluefromtable1最?。簊electmin(field1)asminvaluefromtable1

任務(wù)一JDBC編程環(huán)境的搭建【解題思路】 程序員在使用JDBC編程的時候,只需要面向標(biāo)準(zhǔn)的JDBCAPI編程即可,通過在工程中引進(jìn)不同的數(shù)據(jù)庫驅(qū)動程序來使用不同的數(shù)據(jù)庫。搭建數(shù)據(jù)庫環(huán)境如下步驟:1、安裝MYSQL數(shù)據(jù)庫。2、設(shè)計超市進(jìn)銷存管理系統(tǒng)的數(shù)據(jù)庫。3、測試使用JDBC連接數(shù)據(jù)庫。

【任務(wù)透析】

從網(wǎng)站上獲取MySQL安裝程序后,按安裝向?qū)Р襟E進(jìn)行安裝。(詳見教材)。

進(jìn)銷存系統(tǒng)E-R圖CREATETABLEIFNOTEXISTS`client`(`id`int(10)NOTNULLAUTO_INCREMENT,`code`varchar(50)DEFAULT'0',`name`varchar(50)DEFAULT'0',`address`varchar(50)DEFAULT'0',`telephone`varchar(50)DEFAULT'0',`email`varchar(50)DEFAULT'0',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;創(chuàng)建客戶表SQL語句:創(chuàng)建商品表SQL語句:CREATETABLEIFNOTEXISTS`goods`(`id`int(10)NOTNULLAUTO_INCREMENT,`code`varchar(50)DEFAULTNULL,`name`varchar(50)DEFAULTNULL,`jc`varchar(50)DEFAULTNULL,`cd`varchar(50)DEFAULTNULL,

`dw`varchar(50)DEFAULTNULL,`gg`varchar(50)DEFAULTNULL,`bz`varchar(50)DEFAULTNULL,`ph`varchar(50)DEFAULTNULL,`pzwh`varchar(50)DEFAULTNULL,`memo`varchar(50)DEFAULTNULL,

`dj`doubleDEFAULTNULL,`sl`int(11)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=8DEFAULTCHARSET=utf8;按照相似的語句創(chuàng)建其它表。接下來,我們可以使用JDBC對它進(jìn)行連接了:packageedu.gdkm.sql;importjava.sql.*;publicclassDBConnection{ publicstaticConnectiongetConnection(){ Connectioncon=null; try{ Class.forName("com.mysql.jdbc.Driver"); System.out.println("成功加載mysql驅(qū)動程序"); }catch(ClassNotFoundExceptione){ System.out.println("無法找到mysql驅(qū)動程序,請檢查jar包是否導(dǎo)入項目中!"); }StringdbURL=newString("jdbc:mysql://127.0.0.1:3306/gdkmjxc"); try{ con=DriverManager.getConnection(dbURL,"root","root"); System.out.println("數(shù)據(jù)庫連接成功"); }catch(SQLExceptione){ System.out.println("數(shù)據(jù)庫連接失敗"); } returncon; }}packageedu.gdkm.ui;

importedu.gdkm.sql.DBConnection;

public

classTestMain{

public

static

voidmain(String[]args){ DBConnection.getConnection(); }}測試,數(shù)據(jù)庫連接成功:任務(wù)一集合類的選擇

【課堂提問】1.在一個已完成的信息管理系統(tǒng)中,如果需要采用其他廠商的數(shù)據(jù)庫,需要改動程序業(yè)務(wù)邏輯嗎?為什么?哪些是需要改動的地方?【現(xiàn)場演練】嘗試連接msssql2005。任務(wù)二采用Statement完成數(shù)據(jù)庫的增刪改查

【任務(wù)描述】超市進(jìn)銷存系統(tǒng)中商品信息的管理。任務(wù)二采用List派生集合管理有序數(shù)據(jù)【必備知識】1.Statement類Statement對象用于將不帶參數(shù)的簡單SQL語句發(fā)送到數(shù)據(jù)庫,該對象提供了3種執(zhí)行SQL語句的方法:executeQuery,executeUpdate和execute,具體使用哪種方法由SQL語句所產(chǎn)生的內(nèi)容決定。2.ResultSet結(jié)果集

ResultSet對象是執(zhí)行Statement對象的方法后返回的一個對象,包括了符合SQL語句中條件的數(shù)據(jù)庫所有行,可以通過一套get方法(getString()、getInt()等)對這些行的數(shù)據(jù)進(jìn)行訪問,通過next方法用于訪問結(jié)果集中的各行。3.3.JDBC編程一般步驟(1)通過帶參數(shù)調(diào)用Class.forName()方法,將DriverManager類實例化、加載驅(qū)動程序。(2)調(diào)用DriverManager.getConnection()方法取得一個Connection對象,以此連接到數(shù)據(jù)庫。(3)通過Connection.createStatement()方法創(chuàng)建一個Statement對象,以此來訪問數(shù)據(jù)庫表中的記錄。(4)通過Statement.executeQuery()方法或Statement.executeUpdate()方法來查詢或更新數(shù)據(jù)庫記錄。(5)如果執(zhí)行了一個查詢,可以通過處理Statement.executeQuery()方法所返回的ResultSet對象,通過該對象可以進(jìn)行數(shù)據(jù)庫記錄的瀏覽、新增、刪除和修改。(6)完成數(shù)據(jù)庫操作后,依次調(diào)用各個對象的Close()方法,關(guān)閉數(shù)據(jù)庫連接,釋放JDBC資源。任務(wù)二【解題思路】 超市進(jìn)銷存系統(tǒng)中商品信息的管理,其中包括商品信息列表查詢,商品的添加、修改和刪除,我們可以利用statement對象實現(xiàn)數(shù)據(jù)庫的訪問,將SQL語句傳輸?shù)綌?shù)據(jù)庫,并得到對應(yīng)的處理。處理步驟如下:1、定義一個業(yè)務(wù)接口GoodsService用于完成商品信息業(yè)務(wù)操作,并在里面定義查詢、添加、修改、刪除等方法。2、利用Statement對象結(jié)合SQL語句,在GoodsServiceImpl類中實現(xiàn)該接口定義的若干方法。3、將數(shù)據(jù)體現(xiàn)到窗口顯示。【任務(wù)透析】參見程序代碼。任務(wù)二采用List派生集合管理有序數(shù)據(jù)【課堂提問】★簡述使用JDBC操作數(shù)據(jù)庫的步驟?!锸褂肧tatement操作數(shù)據(jù)庫時,可以使用哪些方法,這些方法分別針對數(shù)據(jù)庫的哪些操作?★數(shù)據(jù)庫注入攻擊是一種很常見的黑客手段,那么使用JDBC操作數(shù)據(jù)庫會不會出現(xiàn)這種安全隱患,有什么方法可以避免嗎?【現(xiàn)場演練】

1.嘗試完成供貨商的信息管理功能。2.嘗試完成員工的信息管理功能。任務(wù)三

采用PreparedStatement完成數(shù)據(jù)庫的增刪改查【任務(wù)描述】

使用PreparedStatement實現(xiàn)商品信息的管理。任務(wù)三采用PreparedStatement完成數(shù)據(jù)庫的增刪改查【必備知識】1.PreparedStatement簡介PreparedStatement接口繼承與Statement,但是兩者有很大的不同之處:PreparedStatement對象在初始化時包含了已經(jīng)編譯好的需要執(zhí)行的SQL語句,由于它的預(yù)編譯特性,所以該對象執(zhí)行的速度要快于Statement對象,適用于需要多次執(zhí)行的SQL語句?!颈貍渲R】2.常用派生類HashSet類HashSet是Set集合的典型實現(xiàn),它按hash算法來存儲集合中的元素。名稱概述clearParameters()立即清除當(dāng)前參數(shù)值executeQuery()執(zhí)行SQL查詢,返回結(jié)果集executeUpdate()執(zhí)行SQL更新語句setString()將指定參數(shù)設(shè)置為字符串的值setDouble()將指定參數(shù)設(shè)置為雙精度值setInt()將指定參數(shù)設(shè)置為整數(shù)值PreparedStatement對象的常用方法任務(wù)三采用PreparedStatement完成數(shù)據(jù)庫的增刪改查【解題思路】 因為需要實現(xiàn)的功能與任務(wù)二一致,我們只需要將任務(wù)二中使用Statement的部分使用對應(yīng)的PreparedStatement替換即可。

public

booleansearch(Stringcondition,Stringvalues){ GoodInfoQueryUi.a=newObject[18][10]; PreparedStatementpstmt; ResultSetrs; Connectioncon=DBConnection.getConnection();

try{ StringinputStr=null,recode;

intn=0;

if(condition=="商品全稱") inputStr="name=?";

if(condition=="商品編號") inputStr="code=?";

if(condition=="產(chǎn)地") inputStr="cd=?"; recode="SELECT*FROMgoodsWHERE"+inputStr; pstmt=con.prepareStatement(recode); pstmt.setString(1,values); rs=pstmt.executeQuery();

while(rs.next()){ GoodInfoQueryUi.a[n][0]=rs.getInt(1); GoodInfoQueryUi.a[n][1]=rs.getString(3); GoodInfoQueryUi.a[n][2]=rs.getString(2); GoodInfoQueryUi.a[n][3]=rs.getString(5); GoodInfoQueryUi.a[n][4]=rs.getString(6); GoodInfoQueryUi.a

溫馨提示

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

評論

0/150

提交評論