8數據庫編程課件_第1頁
8數據庫編程課件_第2頁
8數據庫編程課件_第3頁
8數據庫編程課件_第4頁
8數據庫編程課件_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、8數據庫編程數據庫編程數據庫系統概論數據庫系統概論an introduction to database system 第八章第八章 數據庫編程數據庫編程8數據庫編程數據庫編程8.1 嵌入式嵌入式sqlsql語句除了象前面介紹的可以交互的方式使用的外,更常用的方式是用某種傳統的編程語言(例如:c、pb、cobol等)編寫程序,但程序中的某些函數或某些語句是sql語句。這種方式下使用的sql語言稱為嵌入式sql(embeddedsql),其中傳統的編程語言稱為宿主語言(或主語言)。8數據庫編程數據庫編程sql嵌入高級語言中的方法嵌入高級語言中的方法uc和powerbuilder等語言,直接嵌入s

2、ql語句ujava、c#等面向對象語言更多的是通過類封裝操作數據庫的語句,并將sql作為參數進行調用。8數據庫編程數據庫編程8.2 odbc & jdbcodbc: 是微軟公司開放服務體系(windows open services architecture,wosa)中有關數據庫的一個組成部分 提供了一組訪問數據庫的標準api 規(guī)范rdbms應用接口8數據庫編程數據庫編程odbc應用系統的體系結構 :一、 用戶應用程序 二、 驅動程序管理器 三、 數據庫驅動程序四、 odbc數據源管理 8數據庫編程數據庫編程8數據庫編程數據庫編程為什么需要為什么需要jdbcjdbc是java數據庫連

3、接技術的簡稱,提供連接各種常用數據庫的能力java應用程序應用程序jdbcjdbcjsp/servlet客戶端客戶端數據庫服務器數據庫服務器應用服務器應用服務器數據庫服務器數據庫服務器客戶端客戶端8數據庫編程數據庫編程java program 1jdbcdatabasejdbcodbcjdbcjava classweb serverbrowserdbajava program 2delphi program 1jdbc8數據庫編程數據庫編程jdbc apijdbc api可做三件事:與數據庫建立連接、執(zhí)行sql 語句、處理結果connectiondrivermanagerstatementre

4、sultset drivermanager :依據數據庫的不同,管理:依據數據庫的不同,管理jdbc驅動驅動 connection :負責連接數據庫并擔任傳送數據的任務:負責連接數據庫并擔任傳送數據的任務 statement :由由 connection 產生、負責執(zhí)行產生、負責執(zhí)行sql語句語句 resultset:負責保存:負責保存statement執(zhí)行后所產生的查詢結果執(zhí)行后所產生的查詢結果客戶端客戶端數據庫服務器數據庫服務器12348數據庫編程數據庫編程 java 數據庫連接數據庫連接如何用 java 建立數據庫應用:以數據庫 sql server 為例.必要的構件:jdk;jdbc(

5、一個類庫文件jar,其中包含某個驅動器driver,如net.sourceforge.jtds.jdbc.driver) jdbc由兩部分構成:接口規(guī)范和實現。 接口規(guī)范是統一的;而實現由數據庫廠商提供。 jdbc僅負責連接數據庫,轉發(fā)sql指令和結果。連接前的準備:確認數據庫服務器已啟動。1. jdbc 類庫文件(如jtds.jar)設在合適的類路徑classpath8數據庫編程數據庫編程如何連接數據庫:連接數據庫需要4個參數: 數據庫 url(uniform resource locator)如:jdbc:jtds:sqlserver:/localhost:1433/pubs注意:每種 d

6、bms 有不同的 url。應參考相關文檔。 驅動器 driver如“net.sourceforge.jtds.jdbc.driver”注意:每種 dbms 使用不同的驅動器。應參考相關文檔。 用戶名如“dba” 口令如“sql” java 數據庫連接(續(xù))數據庫連接(續(xù))8數據庫編程數據庫編程jdbc程序的工作模板程序的工作模板try class.forname(jdbc驅動類驅動類); catch (classnotfoundexception e) system.out.println(無法找到驅動類無法找到驅動類);try connection con=drivermanager.get

7、connection(jdbc url,數據庫用戶名數據庫用戶名,密碼密碼); statement stmt = con.createstatement(); resultset rs = stmt.executequery(select a, b, c from table1); while (rs.next() int x = rs.getint(a); string s = rs.getstring(b); float f = rs.getfloat(c); /略略 con.close(); catch (sqlexception e) e.printstacktrace();獲得數據庫

8、連接獲得數據庫連接發(fā)送發(fā)送sql語句語句處理結果處理結果注冊注冊jdbc驅動驅動jdbc url用來標識數據庫用來標識數據庫 必須處理的異常必須處理的異常釋放資源釋放資源必須處理的異常必須處理的異常8數據庫編程數據庫編程下面方法執(zhí)行一個 select 語句,加載某客戶信息并初始化當前對象。 public class customer . public int loadcustomer(int custid) throws exception string sql = select customer.custid, name, prov, city, phone, unit, count(dis

9、tinct salesorder.orderno), sum(quantity), sum(singlecost*quantity) + from customer natural left outer join (salesorder key join salesitem) + where customer.custid = ? + group by customer.custid,name,prov,city,phone,unit; try preparedstatement prepst = con.preparestatement(sql); prepst.setint(1,custi

10、d); resultset rs = prepst.executequery(); java 數據庫連接數據庫連接8數據庫編程數據庫編程 if (rs.next() this.custid = rs.getint(1);name = rs.getstring(2);prov = rs.getstring(3);city = rs.getstring(4);phone = rs.getstring(5);unit = rs.getstring(6);ordernum = rs.getint(7);quantity = rs.getint(8);amount = rs.getdouble(9);p

11、repst.close(); elseprepst.close();throw new exception(客戶:+custid+不存在); catch (sqlexception ex) dbcon.printsqlexception(ex); return custid; java 數據庫連接數據庫連接(續(xù)續(xù))8數據庫編程數據庫編程8.3 t_sqltransact-sql語言是microsoft開發(fā)的一種sql語言,簡稱t-sql語言。8數據庫編程數據庫編程標識符標識符n 長度不超過128個字符。n 開頭字母為a-z或a-z、#、_ 或 以及來自其它語言的字母字符。n 后續(xù)字符可以是a-

12、z、a-z、來自其它語言的字母字符、數字、#、$、_、。n 不允許嵌入空格或其它特殊字符。n 不允許與保留字同名。8數據庫編程數據庫編程常用數據類型常用數據類型data typedesc.max lengthcharfixed size8000 charactersvarcharvariable size8000 characterstextvariable size231 - 1 ncharunicode, fixed size4000 charactersnvarcharunicode, variable size4000 charactersntextunicode, variable

13、size230 - 1 8數據庫編程數據庫編程常用數據類型(續(xù))常用數據類型(續(xù))data typestorage sizeminimummaximumint4 bytes-231231 1smallint2 bytes-215215 1tinyint1 byte0255bigint8 bytes-263263 1bit1 bit018數據庫編程數據庫編程常用數據類型(續(xù))常用數據類型(續(xù))data typestorage sizebinary8000 bytesvarbinary8000 bytesimage=90 begin print 成績優(yōu)秀! select * from sc whe

14、re cno = 1 endelse print 繼續(xù)努力!8數據庫編程數據庫編程while循環(huán)循環(huán)while 布爾表達式 begin sql語句 | 語句塊 end8數據庫編程數據庫編程while循環(huán)循環(huán)舉例舉例u求1到100之間的奇數和。declare i smallint,sum smallintset i=1set sum=0while i=90set level=a else if grade=80set level=b else if grade=70 set level=c else if grade=60 set level=d else set level=e print s

15、no+ +cno+ +cast(grade as varchar)+ +level fetch c1 into sno,cno,grade;endclose c1;deallocate c1;8數據庫編程數據庫編程8.5 存儲過程存儲過程u 存儲過程(stored procedure)可以使得對數據庫的管理、以及顯示關于數據庫及其用戶信息的工作容易得多。存儲過程是存儲過程是sqi語句和可選語句和可選控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理。控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數據庫內,可由應用程序通過一個調用執(zhí)行,而且允許用戶聲明變量,有條件

16、執(zhí)行以及其他強大的編程功能。u 存儲過程可包含程序流、邏輯以及對數據庫的查詢。它們可以接受參數,輸出參數、返回單個或多個結果集以及返回值。u 存儲過程是封裝重復性工作的一種方法。存儲過程支持用戶聲明的變量、條件執(zhí)行和其他有用的編程功能。8數據庫編程數據庫編程創(chuàng)建存儲過程語法創(chuàng)建存儲過程語法create procedure procedure_name parameter data_type = default output ,. nassql_statement . n8數據庫編程數據庫編程舉例舉例create procedure msp_getstusdept varchar(15)asse

17、lect *from studentwhere sdept = sdept8數據庫編程數據庫編程執(zhí)行存儲過程執(zhí)行存儲過程u方法1:exec msp_getstu isu方法2:exec msp_getstu sdept=isu方法3: declare s varchar(15) set s=is exec msp_getstu sdept=s8數據庫編程數據庫編程output參數參數create procedure dbo.mathtutorm1 smallint,m2 smallint,result smallint outputasset result = m1 * m2declare a

18、nswer smallintexecute mathtutor 5, 6, answer outputselect the result is: , answerthe result is: 308數據庫編程數據庫編程8.6 函數函數usql server 允許用戶創(chuàng)建自定義函數,自定義函數可以有返回值。u自定義函數分為:標量值函數或表值函數p 如果 returns 子句指定一種標量數據類型,則函數為標量值函數。可以使用多條 transact-sql 語句定義標量值函數。p 如果 returns 子句指定 table,則函數為表值函數。u表值函數又可分為:內嵌表值函數(行內函數)或多語句函數p

19、 如果 returns 子句指定的 table 不附帶列的列表,則該函數為內嵌表值函數。p 如果 returns 子句指定的 table 類型帶有列及其數據類型,則該函數是多語句表值函數。8數據庫編程數據庫編程標量值函數標量值函數語法create function 函數名(參數)returns 返回值數據類型asbeginsql語句(必須有return 變量或值) end8數據庫編程數據庫編程u例1:求每個學生的平均成績create function udf_getavgscore(sno varchar(5)returns floatbegindeclare avg float;select avg=avg(grade)from scwhere sno=snoreturn avgendselect sno,sname,dbo.udf_getavgscore(sno)from student8數據庫編程數據庫編程表值函數u內聯表值函數語法create f

溫馨提示

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

評論

0/150

提交評論