2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、JSP訪問數據庫,關系數據庫,Access SQL server Oracle,數據庫,DBMS,不同DBMS對底層數據有不同的操作方法,為了隱蔽DBMS和數據操作的差異性,產生了統(tǒng)一標準:SQL,SQL語言,Jdbc結構,SQL,driver,DBMS,,,將SQL調用轉化為DBMS API調用,JDBC結構,,,Java.sql.*,JDBC應用程序結構,,三種常見的JSP通過JDBC訪問數據庫的方法在JSP頁面中直

2、接訪問數據庫在Servlet中訪問數據庫通過JavaBean封裝對數據庫的訪問,,在JSP中可使用Java的JDBC技術,實現(xiàn)對數據庫中表記錄的查詢、修改和刪除等操作。JDBC(Java DataBase Connectivity)是Java數據庫連接API??赏瓿扇拢号c一個數據庫建立連接;向數據庫發(fā)送SQL語句;處理數據庫返回的結果。,使用JDBC對數據庫進行一次數據庫操作需要進行如下的幾個步驟:載入JDBC驅動程序

3、定義連接使用的URL建立連接創(chuàng)建語句對象執(zhí)行數據庫操作處理結果關閉連接,,JDBC和數據庫建立連接的一種常見方式是建立起一個JDBC-ODBC橋接器。由于ODBC驅動程序被廣泛使用,建立這種橋接器后,使得JDBC有能力訪問幾乎所有類型的數據庫。JDBC也可以直接加載數據庫驅動程序來訪問數據庫。如果使用JDBC-ODBC橋接器訪問數據庫,事先必須設置數據源。,DBC橋接器,直觀的理解:一個數據源就是一個數據庫。為了要鏈接到

4、這個數據庫,需要建立一個JDBC-ODBC橋接器,即加載橋接器驅動程序。 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 其中,Class是包java.lang中的一個類,該類通過調用它的靜態(tài)方法forName就可以建立JDBC-ODBC橋接器。建立橋接器可能發(fā)生異常,所以建立橋接器的標準是: try{ Class.forName(“sun.j

5、dbc.odbc.JdbcOdbcDriver”); } catch(ClassNotFoundException e) {},查詢記錄,要查詢數據庫中的記錄,必須和數據庫建立連接。由于是以JDBC-ODBC方式訪問數據庫,就要與數據源建立連接。,連接到數據庫,首先使用包java.sql中的Connection類聲明一個對象,然后再使用類DriverManager調用它的靜態(tài)方法getConnection創(chuàng)

6、建這個連接對象。 Connection con= DriverManager.getConnection(“jdbc:odbc:數據源名字”,”login name”,”password”); 如果還沒為數據源設置login name和password,則連接形式是: Connection con= DriverManager.getConnection(“jdbc:odbc:數據源名字”,””,””);,向數據庫發(fā)送SQL

7、語句,首先使用Statement類聲明一個SQL語句對象,然后通過剛才創(chuàng)建的連接數據庫的對象con調用方法createStatment()創(chuàng)建這個SQL語句對象。 try{ Statement sql=con. createStatment(); } catch(SQLException e){},創(chuàng)建了Statement接口的實例后,可調用其中的方法執(zhí)行SQL語句,JDBC中提供了三種執(zhí)行方

8、法,它們是execute()、executeQuery()和executeUpdate()。executeUpdate方法 :這個方法一般用于執(zhí)行SQL的INSERT、UPDATE或DELETE語句,當執(zhí)行INSERT等SQL語句時,此方法的返回值是執(zhí)行了這個SQL語句后所影響的記錄的總行數。,Statement,executeQuery方法 :一般用于執(zhí)行SQL的SELECT語句。它的返回值是執(zhí)行SQL語句后產生的一個ResultS

9、et接口的實例(結果集)。 execute方法 :一般是在用戶不知道執(zhí)行SQL語句后會產生什么結果或可能有多種類型的結果產生時才會使用。execute()的執(zhí)行結果包括如下三種情況: 1.包含多個ResultSet(結果集); 2.多條記錄被影響; 3.既包含結果集也有記錄被影響。,Statement,ResultSet,ResultSet 對象包含了Statement和PreparedStatement的ex

10、ecuteQuery方法中SELECT查詢的結果集,即符合指定SQL 語句中條件的所有行。ResultSet.next 方法用于移動到 ResultSet 中的下一行,使下一行成為當前行。結果集一般是一個表,其中有查詢所返回的列標題及相應的值。,處理查詢結果,有了SQL語句對象后,這個對象就可以調用相應的方法實現(xiàn)對數據庫中表的查詢和修改,并將查詢結果存放在一個ResultSet類聲明的對象中,即SQL語句對數據庫的查詢操作將返回一個R

11、esultSet對象: ResultSet rs=sql.executeQuery(“SELECT * FROM 成績表”) ResultSet對象是由統(tǒng)一形式的列組織的數據行組成。 ResultSet對象一次只能看到一個數據行,使用next()方法走到下一數據行。獲得一行數據后, ResultSet對象可以使用getxxxx方法獲得字段值,將位置索引(第一列使用1,第二列使用2等等)或字段名傳遞給getxxx

12、x方法的參數即可。,ResultSet類的方法,driver,connection,Statement,ResultSet,close,,,,,注意次序!,順序查詢,使用結果集Result的next()方法,可以順序地查詢。一個結果最初將游標定位在第一行的前面,第一次調用next()方法使游標移動到第一行。Next()方法返回一個boolean型數據,當游標移動到最后一行之后返回false.,ex60,游動查詢,有時需要在結果集中前后移

13、動或顯示結果集指定的一條記錄等等。則需返回一個可滾動的結果集為了得到一個可滾動的結果集,需先獲得一個Statement對象: Statement stmt=con.createStatement(int type, int concurrency); 然后,根據參數type, concurrency取值情況,stmt返回相應類型的結果集: ResultSet re=stmt.executeQuery(SQL語句);

14、,Type取值決定滾動方式,取值可以是:,,,ex61,隨機查詢,ex62,參數查詢,ex63,排序查詢,,ex64,分析結果集查詢,,ex65,使用通配符查詢,可以使用SQL語句操作符like進行模式般配,使用”%”代替一個或多個字符,用一個下劃線”_”代替一個字符。 例:rs.executeQuery(“select * from students where 姓名 like ‘王’ ”),更新記錄,用SQL語句更新記錄中字段的

15、值。 Statement對象調用方法: public int executeUpdate(String sqlStatement); 通過參數sqlStatement指定的方式實現(xiàn)對數據庫表中記錄的字段值的更新。,注意事項,可使用一個Statement對象進行更新和查詢操作,但當查詢語句返回結果集后,如果沒有立即輸出結果集的記錄,而接著執(zhí)行了更新語句,那么結果集就不能輸出記錄。要想輸出記錄就必須重新返回結果集。,ex

16、66,添加記錄,對于添加記錄注意事項與上同刪除記錄,ex67,用結果集更新數據庫中的表,盡管可以用SQL語句對數據庫中的表進行更新,也可以使用內存中的ResultSet對象對底層數據庫進行更新。,用結果集更新數據庫中的表,步驟:由Connection對象調用如下方法,到一個可以更新底層數據庫的Statement對象sql;Statement對象sql調用如下方法得到ResultSet對象rs:rs調用相應updateXXX

17、方法對rs中所有的行的列值進行更新操作。例:將rs移動到第n行后,然后調用updateRow()方法,更新底層數據庫表中的第n條記錄。rs也可以調用rs.insertRow()方法將更新的結果集作為一條新的記錄插入到底層數據庫表中。如果rs的某列的值未被更新,那么插入到底層數據庫表中的記錄的相應字段值為null.,,ResultSet對象常用的更新操作方法:,,,ex68,分頁顯示記錄,假設總記錄為m,每頁顯示數量是n,那么總頁數的計

18、算公式是:如果m除以n的余數大于0,總頁數等于m除以n的商加1;如果m除以n的余數等于0,總頁數等于m除以n的商;如果準備顯示第p頁的內容,應當把游標移動到第(p-1)*n+1條記錄處。,ex69,連接數據庫其他方法,連接Oracle 可通過JDBC-ODBC橋接器和Oracle數據庫建立連接,但這種連接質量依賴于ODBC.,,查詢excel電子表,可以通過JDBC-ODBC橋接器訪問Excel電子表格。,ex70,使用同

19、步連接,數據庫操作中,建立連接是耗時最大的操作之一。如果客戶訪問的是同一數據庫,那么為每一個客戶建立一個連接是不合理的。當多個客戶請求一個JSP頁面時,JSP引擎為每個客戶啟動一個線程而不是一個進程,這些線程由Web服務器進程來管理,它們共享JSP頁面的成員變量。在處理多線程問題時,可將線程共享的變量放入一個synchronized塊,或將修改該變量的方法用synchronized來修飾,這樣,當一個客戶用synchronized塊或

20、synchronized方法修改一個共享變量時,其他線程必須等待,直到該線程執(zhí)行完該方法或同步塊。這樣可把connection對象作為一個成員變量被所有的客戶共享,第一個訪問數據庫的客戶負責建立連接,以后所有客戶共享這個連接。,ex71,網上投票,,ex72,,String 的長度是不可變的,StringBuffer的長度是可變的。如果對字符串中的長度經常進行操作,特別是內容要修改時,使用StringBuffer,如果最后需要Stri

21、ng,那么使用StringBuffer的toString()方法。,數據庫連接池,在基于數據庫的 Web系統(tǒng)中,如果在較短的時間內,訪問數據庫的請求量不大 但隨著請求數不斷增加,系統(tǒng)的開銷越來越大,響應 Web請求的速度越來越慢,就會導致系統(tǒng)無法響應Web 請求。,,造成這種結果的原因是由于傳統(tǒng)數據庫訪問模式存在下面的一些缺陷:每次數據庫請求都需要建立一次數據庫連接,而每建立一次數據庫連接就需要花費 0.05s~1s的時間,這個時間

22、相對于數據庫本身的操作時間和軟件本身的執(zhí)行時間來說,是非常漫長的。由于沒有對連接數據庫的連接數量進行控制,因此可能出現(xiàn)超出數據庫處理能力的連接數量和處理請求,導致系統(tǒng)的崩潰。單獨管理每一個連接,并進行使用后的資源回收。在這種方式下,如果某些連接出現(xiàn)了異常,導致無法正常關閉連接,那么將會導致資源的嚴重浪費甚至數據庫服務器的內存泄漏。由于以上的缺點,開發(fā)人員設計出一種叫做“連接池”的技術,來處理傳統(tǒng)連接方式帶來的問題。,連接池的基本原

23、理,在應用共享資源的開發(fā)中,有一個很著名的設計模式:資源池(Resource Pool)。該模式正是為了解決資源的頻繁分配﹑釋放所造成的一系列問題而設計的。在數據庫領域,這個設計模式的很重要的應用就是數據庫連接池。,連接池的基本原理,數據庫連接池的基本思想就是為數據庫連接建立一個“存儲池”。數據庫建立初期,預先在緩沖池中放入一定數量的連接,當需要建立數據庫連接時,只需從“連接池”中申請一個,使用完畢之后再將該連接作為公共資源保存在“連接

24、池”中,以供其他連接申請使用。,,當需要連接時,就不用再需要重新建立連接,這樣就在很大程度上提高了數據庫連接處理的速度;同時,還可以通過設定連接池最大連接數來防止系統(tǒng)無控制的與數據庫連接;更為重要的是可以通過連接池管理機制監(jiān)視數據庫的連接的數量以及各連接的使用情況,為系統(tǒng)開發(fā)﹑測試及性能調整提供依據。,,除了向連接池請求分配數據庫連接之外,由于不能使用同一個連接次數過多,連接池還負責按照一定的規(guī)則釋放使用次數較多的連接,并重新生成新的連

25、接實例。保持連接池中所有連接的可用性。,在Tomcat中配置連接池,在Tomcat5.5下配置數據庫連接池的步驟,以連接MS SQLServer數據庫為例: 1、首先是確保Tomcat安裝目錄的\common\lib目錄(或者是\webapps\yourweb\WEB-INF\lib目錄,具體位于哪個目錄,根據實際應用情況而定)中已經包含了JDBC連接數據庫所必須的三個jar文件。,,將JDBC驅動器安裝后的lib目錄下的三個jar文

26、件拷貝到Tomcat安裝目錄的common/lib目錄下即。這樣在JSP頁面中使用數據庫連接時,就可以使用JDBC驅動中提供的接口和類。,,2、修改Tomcat安裝目錄的conf子目錄中的server.xml文件,在元素中添加如下的內容,用以配置連接數據庫的各項信息:,每個字段都有自己的含義 :,name:定義數據庫連接的名稱。driverClassNam:指定JDBC驅動器的類。username:表示登陸數據庫時使用的用戶名。

27、password:為登陸數據庫的密碼。maxIdle:為數據庫連接的最大空閑時間。超過此空閑時間,數據庫連接將被標記為不可用,然后被釋放。設為0表示無限制。maxWait:表示最大建立連接等待時間。如果超過此時間將接到異常。設為-1表示無限制。maxActive:表示連接池的最大數據庫連接數。設為0表示無限制。url:表示的是需要連接的數據庫的地址和名稱。,,需要注意的一個問題是,在測試使用的數據庫中,需要為此處使用的用戶名指定

28、相應的權限。,,3、修改Tomcat安裝目錄的conf子目錄中的context.xml文件,在元素中加入以下內容: 元素代表一個Web應用,連接池需要讀取該元素中的信息完成數據庫的連接。有關server.xml中各類元素的具體含義和基本配置方式,自行查閱。,可以使用如下的文件來測試對于數據庫連接池的配置是否正確:,ex73,使用連接池訪問數據庫的實例,,ex74,PreparedStatement,PreparedSta

29、tement接口是Statement接口的子接口,它直接繼承并重載了Statement的方法。PreparedStatement接口的常用方法見圖6-5。,圖6-5 PreparedStatement接口的常用方法,創(chuàng)建PreparedStatement對象形式如下: PreparedStatement psm=con.prepareStatement("INSERT INTO users(u_name,u_pass)

溫馨提示

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

評論

0/150

提交評論