各類數據庫JDBC驅動程序名及連接字符串匯總課件_第1頁
各類數據庫JDBC驅動程序名及連接字符串匯總課件_第2頁
各類數據庫JDBC驅動程序名及連接字符串匯總課件_第3頁
各類數據庫JDBC驅動程序名及連接字符串匯總課件_第4頁
各類數據庫JDBC驅動程序名及連接字符串匯總課件_第5頁
已閱讀5頁,還剩205頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六章 JSP數據庫應用開發(fā) 本章介紹頁面與數據庫之間的通訊根據需要,將頁面數據保存到數據庫中,或者將數據庫中的數據展現在頁面上,或者執(zhí)行數據事務處理:數據查詢和數據更新。學習目標理解數據源熟悉創(chuàng)建數據源的步驟理解JDBC的連接方式熟悉數據查詢技術熟悉數據更新技術主要內容1.WEB數據庫程序設計基礎 2.JDBC簡介 3.JDBC編程基礎4 數據查詢5.數據更新6.1 Web數據庫程序設計基礎下面給出一個存取Web數據庫的JSP數據庫網絡架構圖,如圖所示。 基本上,這是一個B/S存取架構。服務器端由Web服務器和數據庫服務器組成,瀏覽器端只需要一個支持Java的瀏覽器即可,基本上不需要進行配置

2、。服務器端的Web服務器負責執(zhí)行JSP程序,JSP程序通過JDBC(Java DataBase Connectivity)接口和數據庫服務器相連,并取得數據庫中的數據。 也可以通過JDBC向數據庫發(fā)送SQL命令,對數據庫進行新增、刪除和修改記錄等操作,這一切都需要依靠JDBC提供的類與方法來完成。Web服務器還有一項工作,就是將用戶操作數據庫的結果,以HTML的形式通過HTTP,回傳給前端的瀏覽器。JDBC簡介 JDBC(Java DataBase Connectivity,Java數據庫連接),是Sun公司制定的Java連接數據庫技術的簡稱。它是Java環(huán)境中訪問SQL數據庫的一組API(A

3、pplication Programming Interface,應用程序接口) 。包括一些用JAVA語言編寫的類和接口,能方便的向任何關系型數據庫發(fā)送SQL命令。為Java開發(fā)者使用數據庫提供了統(tǒng)一的API。 6.2 JDBC簡介JDBC設計的目的:它是一種規(guī)范,設計出它的最主要的目的是讓各個數據庫開發(fā)商為Java程序員提供標準的數據庫訪問類和接口,使得獨立于DBMS的Java應用程序的開發(fā)成為可能(數據庫改變,驅動程序跟著改變,但應用程序不變)。JDBC的主要功能: 1)創(chuàng)建與數據庫的連接; 2)發(fā)送SQL語句到任何關系型數據庫中; 3)處理數據并查詢結果。JDBC提供了四種連接數據庫的驅

4、動程序方法。JDBC-ODBC橋(JDBC-ODBC Bridge)驅動程序。本機代碼和Java驅動程序。純Java驅動程序。本機協(xié)議Java驅動程序。6.2.1 JDBC-ODBC橋 這是Sun公司最早實現的JDBC 驅動程序,當時主要目的在于快速推廣JDBC,以便業(yè)界接納這個標準。實際上這種驅動程序就是把JDBC API映射到ODBC API上。JDBC-ODBC 橋接方式利用微軟的開放數據庫互連接口(ODBC API)同數據庫服務器通訊,客戶端計算機首先應該安裝并配置ODBC driver 和JDBC-ODBC bridge兩種驅動程序。 利用JDBC-ODBC橋將JDBC數據轉換成OD

5、BC數據源,然后再利用ODBC與數據庫連接。用JDBC-ODBC方式連接數據庫這種連接方式分三個步驟:首先,創(chuàng)建一個數據源;其次,加載JDBC-ODBC驅動程序;第三步,建立一個到數據庫的連接。 數據源是對數據庫的一種映射。我們可以把數據源理解為數據庫本身,一個數據源對應一個數據庫。6.2.2本機代碼和Java驅動程序這種類型的驅動程序把客戶機API上的JDBC調用轉換為Oracle、Sybase、Informix、DB2或其它DBMS的調用。這種驅動方式將數據庫廠商的特殊協(xié)議轉換成Java代碼及二進制類碼,使Java 數據庫客戶方與數據庫服務器方通信。例如:Oracle用SQLNet協(xié)議,D

6、B2用IBM 的數據庫協(xié)議。數據庫廠商的特殊協(xié)議也應該被安裝在客戶機上。6.2.3純Java驅動程序這種方式是純Java driver。數據庫客戶以標準網絡協(xié)議(如HTTP、SHTTP)同數據庫訪問服務器通信,數據庫訪問服務器然后翻譯標準網絡協(xié)議成為數據庫廠商的專有特殊數據庫訪問協(xié)議(也可能用到ODBC driver)與數據庫通信。 6.2.4 本機協(xié)議Java驅動程序采用本機協(xié)議Java驅動程序方式連接數據庫直接將JDBC請求轉換為指定數據庫協(xié)議可接受的請求,并進行調用。這種連接方式分三個步驟:首先,創(chuàng)建一個數據源;其次,加載mssqlserver驅動程序;第三步,建立一個到數據庫的連接。6

7、.2.5 連接數據庫例1:jdbc-odbc的連接方式 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); con=DriverManager.getConnection(jdbc:odbc:grade, , );或 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver) con=DriverManager.getConnection(“jdbc:odbc:university?user=“sa”&password=“sa” );例2:本機協(xié)議Java驅動程序 Class.forName(com.microsoft.jdbc

8、.sqlserver.SQLServerDriver); url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=university2; con=DriverManager.getConnection(url,sa,sa);以SQL server 為例( SQL server 2005安裝)啟動SQL Server Management新建數據庫university數據表的建立與管理-建立student和students表并插入數據studentstudents下載jar包。加載mssqlserver驅動程序Class.forNam

9、e(“com.microsoft.jdbc.sqlserver.SQLServerDriver“)創(chuàng)建一個連接對象。下面是創(chuàng)建連接對象的靜態(tài)方法: public static Connection getConnection(String url,String user, String password) throws SQLException 假設數據源名是 “university2”,用戶登錄系統(tǒng)的帳號是sa/sa。下面是獲得連接對象的方法: url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=university2; con

10、=DriverManager.getConnection(url,sa,sa);/建立與數據庫的連接以Microsoft Access數據庫為例。假設已創(chuàng)建了數據庫db.mdb(保存在E:db.mdb目錄下)。為該數據庫創(chuàng)建數據源的步驟如下:1在管理工具中選擇ODBC數據源 ,如圖6-1所示。2雙擊ODBC數據源圖標,出現如圖6-2所示界面。該圖顯示了User DSN選項卡中的已有數據源的名稱。圖6-2 顯示已有user數據源3單擊Add按鈕,增加新的數據源,如圖6-3所示。此對話框,為新增加的數據源選擇驅動程序。圖6-3 選擇驅動程序4因為要訪問 Microsoft Access數據庫,選擇

11、Micosoft Access Driver(*.mdb) 選項,單擊完成按鈕(為數據源選擇了驅動程序),出現了設置數據源具體項目的對話框,如圖6-4所示。圖6-4 配置數據源5在數據源名(N) 后的文本框中為數據源起一個名字,這里起的名字是grade(可以起別的名字),點擊 選擇(S)按鈕,為數據源grade選擇數據庫,這里選擇的數據庫是E:db.mdb。配置情況如圖6-5所示。圖6-5 配置情況6最后點擊 確定 按鈕,完成了數據源的配置,出現對話框如圖6-6所示。在該對話框中,點擊確定 按鈕,完成數據源grade的配置。圖6-6 配置完成JDBC-ODBC橋接器就是把應用程序與數據源連接起

12、來的驅動程序。因此,創(chuàng)建了數據源以后,還要加載JDBC-ODBC橋接器,即加載驅動程序。下面是加載驅動程序的方式: Class.forName(sun .jdbc.odbc.JdbcOdbcDriver); 通過Class類的靜態(tài)方法forName(String driver) 加載JDBC-ODBC橋接器。創(chuàng)建了數據源,加載了驅動程序,應用程序還是不能連接到數據庫。應用程序要訪問數據庫,還必須創(chuàng)建一個到數據庫的連接。即創(chuàng)建一個連接對象。下面是創(chuàng)建連接對象的靜態(tài)方法:public static Connection getConnection(String url,String user, S

13、tring password) throws SQLException 例如:con=DriverManager.getConnection(“jdbc:odbc:grade”,”,” );6.3JDBC編程6.3.1JDBC中常用的類和接口DriverManager類 DriverManager類對象負責管理注冊到DriverManager 中的JDBC驅動程序,使用DriverManager的方法getConnection()可以生成Connection對象。Connection類 Connection類對象實現與數據源的連接,通過Connection類的createStatement()

14、方法可以生成Statement對象。Statement接口 用于發(fā)送簡單的SQL語句,實現SQL語句的執(zhí)行,用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結果的對象。 。ResultSet接口 實現對數據的處理,維護記錄指針,記錄指針所指記錄為當前記錄。ResultSet對象用于包含符合SQL語句中條件的所有記錄,并且通過一套get方法提供了對這些記錄中數據的訪問。PreparedStatement接口 用于發(fā)送帶有一個或多個輸入參數(IN參數)的SQL語句,PreparedStatement對象代表一個預編譯的SQL語句。執(zhí)行速度較快,需要執(zhí)行多次的語句應該創(chuàng)建為PreparedStatement

15、對象。 PreparedStatement對象中的SQL語句可具有若干個參數,執(zhí)行語句前用setXXX方法來提供。ResultSetMetaData類 ResultSetMetaData類對象保存所有ResultSet對象中關于字段的信息,并提供許多方法來取得這些信息。DatabaseMetaData類 DatabaseMetaData類保存了數據庫的所有特征信息,并且提供許多方法來取得這些信息。SQLException類 當訪問或查詢數據庫時拋出的異常。6.3.2 JDBC訪問數據庫的主要步驟JDBC對數據庫的操作通過多個JDBC的類/接口來實現,主要包括:DriverManager類、Co

16、nnection接口、Statement接口和ResultSet接口。 通過這些類和接口,可以按如下步驟和數據庫建立起連接,并操作數據庫。加載JDBC驅動程序。獲取連接接口。創(chuàng)建Statement對象。執(zhí)行Statement對象。查看返回的結果集。關閉結果集對象。關閉Statement對象。關閉連接接口。(1)JSP代碼通過帶參數調用Class.forName()方法,將DriverManager類實例化、加載驅動程序。(2)在JSP中調用 DriverManager.getConnection()方法取得 一個Connection對象,以此連接到數據庫。(3)通過Connection.cre

17、ateStatement()方法創(chuàng)建一個Statement對象,以此來訪問數據庫表中的記錄。(4)在JSP代碼中通過Statement.executeQuery()方法或Statement.executeUpdate()方法來查詢或更新數據庫記錄。(5)如果執(zhí)行了一個查詢,可以通過JSP代碼來處理Statement.executeQuery()方法所返回的ResultSet對象,通過該對象可以進行數據庫記錄的瀏覽、新增、刪除和修改。(6)完成數據庫操作后,依次調用各個對象的Close()方法,關閉數據庫連接,釋放JDBC資源。 Connection con; Statement sql; Re

18、sultSet rs; String url; try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=university2; con=DriverManager.getConnection(url,sa,sa); sql=con.createStatement(); rs=sql.executeQuery(SELECT * FROM students); 6.3.3常用類及方法的介紹DriverMana

19、ger類 DriverManager類負責管理JDBC驅動程序,是JDBC的管理層,作用于用戶和驅動程序之間。在數據庫和相應驅動程序之間建立連接,以便將Java應用程序能夠使用正確的JDBC驅動程序。DriverManager類中包含一系列Driver類,他們通過調用DriverManager.registerDriver進行注冊。所有的Driver類都必須包含一個靜態(tài)方法,利用這個靜態(tài)方法可以創(chuàng)建該類的實例,然后在加載該類實例時向DriverManager類進行注冊。DriverManager類常用方法如下: Class.forName(String driver):forName()方法用

20、于加載注冊驅動程序。各類數據庫JDBC驅動程序名及連接字符串匯總 Static Connection getConnection (String url,String user,String password) throws SQLException:getConnection()方法用于取得對數據庫的連接。 JDBC中URL的標準語法是: jdbc::,其中subprotocol說明了使用哪種JDBC驅動程序,比如若使用的是JDBC-ODBC Bridge,就寫為“odbc” Subname則為驅動程序提供了連接數據庫所需要的一切信息:比如:jdbc:microsoft:sqlserver:

21、/localhost:1433;DatabaseName=university2,表示使用微軟的sqlserver JDBC驅動程序,且連接安裝在名為localhost的服務器的1433端口的university2數據庫。 Static Driver getDriver(String url) throws SQLExcetion:getDriver()方法用于在已經向DriverManager注冊的驅動程序中尋找一個能夠打開url所指定的數據庫的驅動程序。舉例 SqlserverClass.forName(com.microsoft.jdbc.sqlserver.SQLServerDrive

22、r)url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=university2;con=DriverManager.getConnection(url,sa,sa);MysqlClass.forName(org.gjt.mm.mysql.Driver);con=DriverManager.getConnection(jdbc:mysql:/localhost:3306/student, root, root );Connection類 Connection類負責維護JSP數據庫程序和數據庫之間的連接,Connection對象代表與

23、數據庫的連接,連接過程包括所執(zhí)行的SQL語句和在該連接上所返回的結果。一個應用程序可與單個數據庫建立一個或多個連接,或者可與多個數據庫建立連接。Connection類的常用方法如下。 Statement createStatement () throws SQLException; Statement createStatement (int resultSetType,int resultSetConcurrency) throws SQLException createStatement()方法用于建立Statement類對象。% String url,sql; Connection co

24、n; ResultSet rs; Statement stmt; try Class.forName(com.mysql.jdbc.Driver); url=jdbc:mysql:/localhost:3306/lj; con=DriverManager.getConnection(url,“root”,“l(fā)ijing);stmt=con.createStatement(); sql=SELECT * FROM students ; rs=stmt.executeQuery(sql); 第一個形參指明結果集游標的類型,通過游標來讀取結果集中的記錄。游標類型的取值用符號常量表示主要有三個:參 數

25、 值說 明TYPE_FORWARD_ONLY結果集不可滾動TYPE_SCROLL_INSENSITIVE結果集可滾動,不反映數據庫的變化TYPE_SCROLL_SENSITIVE結果集可滾動,反映數據庫的變化第二個形參指明結果集的并發(fā)性,并發(fā)控制是指多名用戶同時更新行時,用于保護數據庫完整性的技術。不正確的并發(fā)可能導致臟讀、幻讀和不可重復讀等問題。ResultSet中并發(fā)控制常用的取值主要有兩個:ResultSet.CONCUR_READ_ONLY,它是只讀的,不允許通過游標進行更新ResultSet.CONCUR_UPDATABLE,它是樂觀讀寫,不鎖定行。參數resultSetType的取

26、值參 數 值說 明TYPE_FORWARD_ONLY結果集不可滾動TYPE_SCROLL_INSENSITIVE結果集可滾動,不反映數據庫的變化TYPE_SCROLL_SENSITIVE結果集可滾動,反映數據庫的變化參數resultSetConcurrency的取值參 數 值說 明CONCUR_READ_ONLY不能用結果集更新數據CONCUR_UPDATABLE能用結果集更新數據try Class.forName(com.mysql.jdbc.Driver); url=jdbc:mysql:/localhost:3306/lj; con=DriverManager.getConnection

27、(url,root,lijing); stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); sql=SELECT * FROM students ; rs=stmt.executeQuery(sql); rs.absolute(1); rs.updateString(2, AINH); rs.updateInt(3,100);rs.updateInt(4,100); rs.updateInt(5,100); PreparedStatement prepareStatemen

28、t (String sql) throws SQLException prepareStatement()方法用于通過參數中的SQL語句建立PreparedStatement類對象。 void close() throws SQLException 關閉連接。boolean isClosed() throws SQLException 查詢Connection是否被關閉。boolean getAutoCommit() throws SQLException 返回Connection類對象的自動提交方式(AutoCommit)。void setAutoCommit (boolean enable

29、 AutoCommit) throws SQLException 設置Connection類對象的自動提交方式。形參取值為true,表示連接處于自動事務提交模式,則連接將接收到的一條SQL語句當作一個獨立的事務提交。形參取值為false,則表示連接處于JDBC手動事務提交模式,通過調用commit()手動提交事務。public synchrioned void commit()throws SQLException 提交上次永久提交或回滾事務后所發(fā)生的變化并釋放該Connection所鎖定的數據庫。 void rollback() throws SQLException 回滾事務。Statem

30、ent類 通過Statement類所提供的方法,可以利用標準的SQL命令,對數據庫直接進行新增、刪除或修改記錄(Record)的操作。其常用方法如下ResultSet executeQuery (String sql) throws SQLException 支持使用SELECT語句對數據庫進行查詢。int executeUpdate (String sql) throws SQLException 支持使用INSERT、DELETE、UPDATE等語句對數據庫進行新增、刪除和修改操作。void close() throws SQLException 關閉Statement類對象。創(chuàng)建Stat

31、ement對象 Statement stmt=con.createStatement();Statement執(zhí)行sql語句的方法ResultSet executeQuery (String sql) throws SQLException以SQL語句為參數,執(zhí)行SQL查詢語句,并返回單個ResultSet對象例如:Statement stmt=con.createStatement();String sql = “select * from student”;ResultSet rs = stmt. executeQuery(sql);public int executeUpdate(Stri

32、ng sql) throws SQLException以SQL語句為參數,執(zhí)行SQL更新語句及DDL語句,如insert、delete、update、create、drop等,返回值為受影響的行數。例如 Statement stmt=con.createStatement();String sql = “delete from student where Sno=“+” 2005001 ”;int i = stmt. executeUpdate(sql);public boolean execute () throws Exception用于執(zhí)行事先不知道類型的SQL語句,既可以執(zhí)行查詢語句也

33、可以執(zhí)行更新語句。返回:如果第一個結果為 ResultSet 對象,則返回 true;如果其為更新計數或者不存在任何結果,則返回 false 。然后,使用方法 getResultSet() 或 getUpdateCount() 來檢索結果 。ResultSet類 Statement實例執(zhí)行一個SQL語句之后會得到一個ResultSet對象,稱為結果集,是符合條件的所有行的集合。 ResultSet類提供一系列的方法來實現SQL命令。此外,ResultSet類對象還負責維護記錄指針(Cursor,也稱游標),記錄指針總是指向數據表中的某個記錄。ResultSet類常用方法有很多,下面將按其作用分

34、類進行介紹。維護記錄指針boolean absolute (int row) throws SQLException 移動記錄指針到指定的記錄,row指定了目標行的絕對行號,絕對行號由記錄集的第一行開始計算(注意,不是相對行號)。boolean relative (int rows) throws SQLException 將游標移動相對行數,rows為正數或負數,表示目標行相對于當前行的移動行數。例如,當前行是第3行,現在需要移動到第5行,可以使用absolute()方法,語句如下:rs.absolute(5);也可以使用relative()方法,語句如下:rs.relative(2);vo

35、id beforeFirst () throws SQLException 移動記錄指針到第一條記錄之前,即位于記錄集第一行的前面。如果記錄集不包含任何的行時,該方法不產生作用。void afterLast () throws SQLException 移動記錄指針到最后一條記錄之后,即位于記錄集最后一行的后面。如果記錄集不包含任何行時,該方法不產生作用。boolean first() throws SQLException 移動記錄指針到第一條記錄。boolean last() throws SQLException 移動記錄指針到最后一條記錄。boolean next() throws S

36、QLException 移動記錄指針到下一條記錄。將ResultSet對象中的記錄指針移到下一條記錄處,如果成功移動返回true,移動失敗返回false。一般利用此方法來構造一個遍歷結果集的循環(huán) boolean previous() throws SQLException 移動記錄指針到上一條記錄boolean isLast()throws SQLException 檢查當前行是否是記錄集的最后一行,如果是則返回true,否則返回falseboolean isAfterLast()throws SQLException 檢查數據庫指針是否處于記錄集的最后面,如果是則返回true,否則返回fal

37、se。boolean isBeforeFirst()throws SQLException 檢查數據庫指針是否處于記錄集的最前面,如果是則返回true,否則返回false。boolean isFirst() throws SQLException 檢查當前行是否是記錄集的第一行,如果是則返回true,否則返回false。維護記錄void insertRow() throws SQLException 新增一條記錄到數據庫中。void updateRow() throws SQLException 更新數據庫中被修改的行。void updateXXX(int columnIndex,XXX x)

38、 throws SQLException void updateXXX(String columnName , XXX x) throws SQLException 用某類型的數據x去修改指定字段的值,這里的XXX是類型名。例 rs.updateString(1,abc); rs.updateString(name,abc);XXX getXXX(int columnIndex) throws SQLException XXX getXXX(tring columnName) throws SQLException 取得指定字段的值,這里的XXX是類型名。例:String s=rs.getSt

39、ring(name); int s=rs.getInt(1);void deleteRow(int Index) throws SQLException 刪除記錄指針指向的記錄。6.4 數據查詢按照查詢的方式不同,將查詢分為順序查詢、游動查詢、隨機查詢、參數查詢、排序查詢、使用通配符查詢。這種查詢中,獲得的結果集(ResultSet對象)中的游標只能一行行地向下移動。既不能向上移動游標,也不能跳行移動游標。 ResultSet對象由若干行組成。ResultSet對象一次只能看到一個數據行,使用next()方法,使游標移到下一行記錄。ResultSet對象可以用字段索引(第一列是1,第二列是2等

40、等)為參數,獲得對應的字段值(記錄中的數據項),如方法getXxx(int columnIndex);也可以用字段名為參數,獲得對應的字段值(記錄中的數據項),如方法getXxx(String columnName)。ResultSet對象的常用方法如表6-1所示。6.4.1 順序查詢ResultSet類的常用方法返回類型方法名稱booleannext()bytegetByte(int columnIndex)DategetDate(int columnIndex)DoublegetDouble(int columnIndex)FloatgetFloat(int columnIndex)int

41、getInt(int columnIndex)LonggetLong(int columnIndex)StringgetString(int columnIndex)bytegetByte(String columnName)DategetDate(String columnName)DoublegetDouble(String columnName)FloatgetFloat(String columnName)intgetInt(String columnName)LonggetLong(String columnName)StringgetString(String columnName

42、)例6.1 查詢英語成績及格的學生。學生成績保存在表(students)中,表結構為sudents(number,name,math,english,phics)。在lj庫中創(chuàng)建表students。程序結構:程序名:sequence.jsp程序算法: 1.分別聲明連接類型,語句類型,結果集類型的變量:con sql rs stmt 。 2.加載驅動程序。 3.獲取連接對象:con 4.獲取語句對象:sql 5.獲取結果集對象:rs 6.輸出表頭 7.輸出結果集(rs)中的所有記錄 有時,我們需要在結果集中前后移動游標,以便獲取某條記錄。這時,我們必須返回一個可滾動的結果集。為了獲取可滾動的結果

43、集,我們必須使用下述方法先獲得一個Statement對象: Statement stmt= conncreateStatement(int type,int concurrency ) ; 通過上述Statement對象獲得的結果集是可滾動結果集。可滾動結果集(ResultSet)還可用到的方法如下: 6.4.2 游動查詢public boolean previous() 將游標向上移動,該方法返回boolean型數據,當移動結果集第一行之前時返回false。public void beforeFirst() 將游標移到結果集的初始位置,即在第一行之前。public void afterLas

44、t() 將游標移到結果集最后一行之后public void first() 將游標移到結果集的第一行。public void last() 將游標移到結果集的最后一行。public boolean isAfterLast() 判斷游標是否在最后一行之后。public boolean isBeforeFirst() 判斷游標是否在第一行之前。public boolean isFirst() 判斷游標是否指向結果集的第一行。public boolean isLast() 判斷游標是否指向結果集的最后一行。public int getRow() 得到當前游標所指向的行號。行號從1開始,如果結果集沒有

45、行,返回0。public boolean absolute(int row) 將游標移到參數row指定的行號。 說明:如果row取負值,就是倒數的行數。asolute(-1)表示移到最后一行,asolute(-2)表示移到倒數第二行。當移到第一行前面或最后一行的后面時,該方法返回false。例6.2 從表(students)的最后一行開始,以逆序方式輸出記錄。然后單獨輸出物理表中的第5條記錄。問題分析: 從題目要求可知,結果集中的游標必須能上下游動,因此,必須用帶參數的createStatement(int type,int concurrency )方法創(chuàng)建Statement類型的對象。程序

46、結構: 程序名:move.jsp1. 分別聲明連接類型,語句類型,結果集類型的變量: con/sql/rs 。2. 加載驅動程序。3. 獲取連接對象:con4. 獲取語句對象:sql5. 獲取結果集對象:rs6. 游標移到最后一行7. 獲取最后一行的行號8. 輸出記錄數9. 輸出表頭10.將游標移動到最后一行之后11.逆序輸出輸出結果集(rs)中的所有記錄(從表的最后一行開始輸出記錄)12.將游標移到第5條記錄13.輸出第5條記錄。程序算法 例 6.4 對學生表(students)分別按姓名查詢。問題分析:由兩個頁面完成此功能。一個頁面提供查詢輸入界面;一個頁面按姓名查詢數據。程序結構:nam

47、e.jsp頁面提供查詢條件輸入窗口,按姓名查詢時,其姓名參數被提交給byname.jsp頁面。byname.jsp頁面查詢出指定姓名的學生;兩個頁面的交互關系如圖所示。6.4.3 參數查詢name.jsp頁面byname.jsp頁面按姓名查詢程序算法name.jsp:.創(chuàng)建一個表單,該表單包含一個文本框,文本框用于錄入姓名。byname.jsp:1獲取表單中的姓名參數:name2分別聲明連接類型,語句類型,結果集類型的變量:con/sql/rs 。3加載驅動程序。4獲取連接對象:con5獲取語句對象:sql6構造SQL語句字符串:condition7獲取結果集對象:rs8輸出表頭9輸出結果集(

48、rs)中的所有記錄name.jspbyname.jsp結果顯示例6.4從學生表(students)中隨機抽取n條記錄,并計算n條記錄的數學成績的平均值。問題分析: 產生1到n之間的隨機數計算公式如下:int i=(int)(Math.random()*n+1);i的值是1到n之間的隨機數。在程序中,根據該隨機數,把游標移到相應的行,并輸出該行。程序結構: 程序名:random.jsp6.4.4 隨機查詢1分別聲明連接類型,語句類型,結果集類型的變量:con/sql/rs 。加載驅動程序。獲取連接對象:con獲取語句對象:sql獲取結果集對象:rs產生隨機數,以每個數字對象為行號,輸出該行號對應

49、的記錄。 7 . 求出記錄數學成績的平均值,并輸出平均值。程序算法random.jsp問題:輸入數據過大?注意1.獲取表中記錄總數:number2.向vector中添加number個Integer型對象(該對象保存了表的行號)。3.生成范圍為vector.size()大小的隨機數i,使用elementAt(i)取出該處的值。10. 以該值為行號,輸出該行號對應的記錄。11.求出記錄數學成績的平均值,并輸出平均值。問題:重復取值?注意:向vector中添加n個Integer型對象注意:以隨機數為下標,取出該處整數值 可以在SQL語句中使用order by子句對查詢記錄進行排序。例6.5 對學生表

50、(students)選擇排序方式(按姓名、英語成績、總成績)進行排序,輸出成績。程序結構: order.jsp頁面將排序方式提交給byorder.jsp頁面;byorder.jsp頁面根據排序方式,查詢數據并輸出。程序算法: order.jsp 創(chuàng)建一個表單,包含三個單選按鈕,每個單選按鈕代表一種排序方式。 6.4.5排序查詢byorder.jsp:1從表單中獲取排序方式,保存到變量name中。2. 分別聲明連接類型,語句類型,結果集類型的變量:con/sql/rs 。3加載驅動程序。4獲取連接對象:con5獲取語句對象:sql6構造SQL語句字符串(condition),該串指定了記錄的排序

51、方式。7獲取結果集對象:rs8輸出表頭9輸出結果集(rs)中的所有記錄 order.jspbyorder.jsp結果顯示6.5 數據更新數據更新操作包括添加數據、修改數據、刪除數據。6.5.1 插入數據6.5.2 數據修改6.5.3 數據刪除插入數據是把新的記錄插入到一個存在的表中【命令】 INSERT INTO (,) VALUES(,) 【功能】 將新記錄插入到指定的表中,分別用表達式1、表達式2等為字段名1、字段名2等賦值。3. 【說明】 是指要插入新記錄的表;是可選項,指定待添加數據的列;VALUES子句指定待添加數據的具體值。 列名的排列順序不一定要和表定義時的順序一致。但當指定字段

52、名時,VALUES子句表達式的排列順序必須和字段名的排列順序一致,個數相等,數據類型一一對應。INTO語句中沒有出現的列名,新記錄在這些列上將取空值6.5.1插入數據 通過JSP向數據庫中添加記錄的基本方法是:提供一個表單頁供用戶輸入記錄數據,提交表單后,后臺JSP程序從表單中讀取數據,構造SQL語句,將數據添加到數據庫中。例6.6 向表(students)中添加記錄。程序結構: insert.jsp頁面將錄入的數據提交給onInsert.jsp頁面;onInsert.jsp頁將數據添加到表(students)中,并顯示添加數據后表中的記錄。兩個頁面的交互關系如圖所示。insert.jsp頁面

53、onInsert.jsp頁面添加記錄程序算法:insert.jsp: 1. 創(chuàng)建一個表單,包含5個文本框,分別用于錄入學號(number),姓名(name),數學(math),英語(english),物理(physics)成績。 2輸出添加記錄前表(students)中的記錄。2012ch06wholeinsertinsert.jsponInsert.jsp:1從表單中獲取錄入的數據分別保存到以下變量中:number/name/m/e/p。 2分別聲明連接類型,語句類型,結果集類型的變量:con/sql/rs 。3加載驅動程序。4獲取連接對象:con5獲取語句對象:sql6構造SQL插入語句字

54、符串:condition。7執(zhí)行添加操作8輸出添加記錄后的表中全部數據。insert.jsponInsert.jsp注意:SQL語句中變量的處理問題:姓名字段為空?wholeinsertinsertSucc.jsp 修改數據記錄可以使用UPDATE語句對表中的一行或多行記錄的某些列值進行修改。 UPDATE語句 6.5.2 修改數據 UPDATE table_name SET column_name=expression WHERE search_conditionsUPDATE table_name SET column_name=expression WHERE search_condit

55、ions將要被更新的表的表名。UPDATE table_name SET column_name=expression WHERE search_conditions指定要修改數據的字段名。UPDATE table_name SET column_name=expression WHERE search_conditions指定字段的新值,可以是一個常數、表達式或變量。UPDATE table_name SET column_name=expression WHERE search_conditions例如,如下語句將表students中所有數學成績都降20%:UPDATE students

56、SET math=math*0.8UPDATE table_name SET column_name=expression WHERE search_conditions指定搜索條件。只有滿足條件的記錄才會被修改。UPDATE table_name SET column_name=expression WHERE search_conditions例如,將表students中學號為0001學生的成績置零:UPDATE students SET math=0,english=0,physics=0 WHERE number=0001UPDATE table_name SET column_nam

57、e=expression WHERE search_conditions如果省略WHERE選項,則將修改數據表中的所有記錄。 Statement對象的調用方法: int executeUpdate (String sql) throws SQLException 使用參數sql指定的方式對數據庫表中記錄的字段值進行修改。 例:將studnets表中學號為0010學生的姓名修改為王明 i=stmt.executeUpdate(“update students set name=王明 where number=0010”); 例6.7 將students表中的所有同學的成績置零。算法:1、分別聲明

58、連接類型,語句類型,結果集類型的變量:2加載驅動程序。3獲取連接對象:con4獲取語句對象:stmt5構造SQL插入語句字符串:condition。6執(zhí)行修改操作通過JSP修改記錄值的基本思路第一種:用戶輸入修改信息并提交,表單提交后程序從表單中讀出數據構建SQL語句,將新的記錄值更新至數據庫中。 例6.8 根據用戶的輸入,修改表(students)中的某些數據。 程序結構: update.jsp頁面將要修改的數據提交給onUpdate.jsp頁面;onUpdate.jsp頁面執(zhí)行數據修改,并將修改后的表數據顯示出來。兩頁面的交互關系如圖所示。update.jsp頁面onUpdate.jsp頁

59、面執(zhí)行修改程序算法:update.jsp1. 創(chuàng)建表單,該表單包含5個文本框,分別用于錄入學號(number),姓名(name),數學成績(math),英語成績(english),物理成績(physics)。1從表單中獲取關鍵字學號:newNumber2. 從表單中獲取修改后的數據(newName/newMath/newEnglish/newPhysics)3分別聲明連接類型,語句類型,結果集類型的變量:con/sql/rs 。4加載驅動程序。5獲取連接對象:con。6獲取語句對象:stmt。7. 構造SQL語句字符串:condition1。8執(zhí)行修改操作。9顯示修改后的表的記錄。 onUpd

60、ate.jspupdate.jsp onUpdate.jsp注意:編碼轉換注意:SQL語句中變量的處理http:/:8080/whole/update/temp/update.jsp問題1: 非正常輸入,學號為空?思路:在update.jsp頁面添加表單驗證,數據不為空時才允許提交到onUpdate.jsp頁面。Update.jsp頁面的修改:問題2: 非正常輸入,成績?yōu)榭?思路:在onUpdate.jsp頁面添加判斷,如果成績文本框輸入為空,則成績置零。問題3: 非正常輸入,學號不存在?思路:先根據用戶輸入的學號查找,如果找到該學號信息再修改,否則不修改。onUpdate.jsp頁面的修改問

溫馨提示

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

評論

0/150

提交評論