![chap6_在JSP中使用數(shù)據(jù)庫-studen_第1頁](http://file3.renrendoc.com/fileroot3/2021-12/1/f57636ec-8bab-4455-acbc-b506bc24add3/f57636ec-8bab-4455-acbc-b506bc24add31.gif)
![chap6_在JSP中使用數(shù)據(jù)庫-studen_第2頁](http://file3.renrendoc.com/fileroot3/2021-12/1/f57636ec-8bab-4455-acbc-b506bc24add3/f57636ec-8bab-4455-acbc-b506bc24add32.gif)
![chap6_在JSP中使用數(shù)據(jù)庫-studen_第3頁](http://file3.renrendoc.com/fileroot3/2021-12/1/f57636ec-8bab-4455-acbc-b506bc24add3/f57636ec-8bab-4455-acbc-b506bc24add33.gif)
![chap6_在JSP中使用數(shù)據(jù)庫-studen_第4頁](http://file3.renrendoc.com/fileroot3/2021-12/1/f57636ec-8bab-4455-acbc-b506bc24add3/f57636ec-8bab-4455-acbc-b506bc24add34.gif)
![chap6_在JSP中使用數(shù)據(jù)庫-studen_第5頁](http://file3.renrendoc.com/fileroot3/2021-12/1/f57636ec-8bab-4455-acbc-b506bc24add3/f57636ec-8bab-4455-acbc-b506bc24add35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第6章章 在在JSP中使用數(shù)據(jù)庫中使用數(shù)據(jù)庫1、深入理解、深入理解JDBC的工作原理的工作原理2、掌握使用、掌握使用java數(shù)據(jù)庫驅(qū)動連接數(shù)據(jù)庫的基本步驟數(shù)據(jù)庫驅(qū)動連接數(shù)據(jù)庫的基本步驟3、掌握、掌握JDBC數(shù)據(jù)庫的查詢、更新操作數(shù)據(jù)庫的查詢、更新操作4、會在、會在JSP頁面中靈活使用數(shù)據(jù)庫頁面中靈活使用數(shù)據(jù)庫5、了解、了解JDBC-ODBC橋接器數(shù)據(jù)庫連接方式橋接器數(shù)據(jù)庫連接方式6、了解預處理語句和通配符、了解預處理語句和通配符課程目標 1、JDBC介紹介紹* 概念* 工作原理2、連接數(shù)據(jù)庫的常用方式、連接數(shù)據(jù)庫的常用方式* 使用Java數(shù)據(jù)庫驅(qū)動* JDBC-ODBC橋接器3、JDBC查詢
2、操作查詢操作* 順序查詢* 隨機查詢4、JDBC更新、添加與刪除操作更新、添加與刪除操作5、預處理語句和通配符、預處理語句和通配符內(nèi)容提要6.1 JDBC介紹1、什么是、什么是JDBC JDBC(Java DataBase Connectivity),SUN公司為Java程序程序提供的訪問各種數(shù)據(jù)庫的API,它由一些Java類和接口類和接口組成。2、JSP與與JDBCJSP頁面頁面Java程序片,程序片,使用使用java語法連語法連接數(shù)據(jù)庫接數(shù)據(jù)庫數(shù)據(jù)庫數(shù)據(jù)庫返回結(jié)果返回結(jié)果建立連接、發(fā)送建立連接、發(fā)送SQL語句語句3.JDBC的基本原理的基本原理早期數(shù)據(jù)庫開發(fā)模式6.1 JDBC介紹編程語言
3、編程語言OracleSybaseSQLServerMySQLAPI for OracleAPI for SybaseAPI for SQLServerAPI for MySQL使用使用使用使用使用使用使用使用操作操作操作操作操作操作操作操作各種數(shù)據(jù)庫各種數(shù)據(jù)庫1、程序員操作不便、程序員操作不便 2、產(chǎn)品維護成本增加、產(chǎn)品維護成本增加3.JDBC的基本原理的基本原理JDBC開發(fā)數(shù)據(jù)庫模式6.1 JDBC介紹各種數(shù)據(jù)庫各種數(shù)據(jù)庫OracleSybaseSQLServerMySQLAPI for OracleAPI for SybaseAPI for SQLServerAPI for MySQLJD
4、BC接接 口口 由由 各各 個個 數(shù)數(shù) 據(jù)據(jù) 庫庫 廠廠 商商 實實 現(xiàn)現(xiàn) 接口接口1接口接口2接口接口3接口接口4編程語言編程語言統(tǒng)一接口統(tǒng)一接口1、純、純Java數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序 使用使用java語言編寫的數(shù)據(jù)庫驅(qū)動程序(數(shù)據(jù)庫廠商完成)。語言編寫的數(shù)據(jù)庫驅(qū)動程序(數(shù)據(jù)庫廠商完成)。JDBC提供的提供的API將將Java數(shù)據(jù)庫驅(qū)動數(shù)據(jù)庫驅(qū)動轉(zhuǎn)換為數(shù)據(jù)庫系統(tǒng)所使用的轉(zhuǎn)換為數(shù)據(jù)庫系統(tǒng)所使用的專門協(xié)議來實現(xiàn)與數(shù)據(jù)庫交互專門協(xié)議來實現(xiàn)與數(shù)據(jù)庫交互2、JDBC-ODBC橋接器橋接器 應用程序建立應用程序建立“JDBC-ODBC”之間的連接,即之間的連接,即“橋接器橋接器”,和,和數(shù)據(jù)庫的
5、連接由數(shù)據(jù)庫的連接由ODBC(Open Database Connectivity)去完成。)去完成。6.2 JDBC連接數(shù)據(jù)庫的常用方式 JDBC調(diào)用調(diào)用Java數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序充分利用充分利用ODBC的優(yōu)勢的優(yōu)勢JDBC-ODBC1、純、純Java數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序6.2 JDBC連接數(shù)據(jù)庫的常用方式應用程序應用程序JDBCOracle驅(qū)動驅(qū)動SQL Server驅(qū)動驅(qū)動MySQL驅(qū)動驅(qū)動其他驅(qū)動其他驅(qū)動Oracle數(shù)據(jù)庫數(shù)據(jù)庫SQL ServerMySQL數(shù)據(jù)庫數(shù)據(jù)庫其他數(shù)據(jù)庫其他數(shù)據(jù)庫使使用用加加載載連接連接連接連接連接連接連接連接使用使用JDBC的應用程序所駐留
6、的計算機的應用程序所駐留的計算機1、純、純Java數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序JDBC1)位置:位于)位置:位于JDK的安裝目錄下的安裝目錄下2)內(nèi)容)內(nèi)容接口:接口:Driver、Connection、Statement ResultSet類:類:DriverManager6.2 JDBC連接數(shù)據(jù)庫的常用方式C:Program FilesJavajdk1.6.0_02jrelibrt.jarimport java.sql.*1、純、純Java數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序JDBC6.2 JDBC連接數(shù)據(jù)庫的常用方式名稱名稱解釋解釋DriverDriver驅(qū)動程序接口,被數(shù)據(jù)庫廠商實現(xiàn),加驅(qū)動程
7、序接口,被數(shù)據(jù)庫廠商實現(xiàn),加載后才能連接數(shù)據(jù)庫載后才能連接數(shù)據(jù)庫DrvierManagerDrvierManager(類)(類)處理驅(qū)動的調(diào)入,并且產(chǎn)生新的數(shù)據(jù)庫處理驅(qū)動的調(diào)入,并且產(chǎn)生新的數(shù)據(jù)庫連接連接ConnectionConnection代表對特定數(shù)據(jù)庫的連接代表對特定數(shù)據(jù)庫的連接StatementStatement用于發(fā)送用于發(fā)送SQLSQL語句,接收語句,接收SQLSQL的執(zhí)行結(jié)果的執(zhí)行結(jié)果ResultSetResultSet執(zhí)行查詢語句得到的結(jié)果集執(zhí)行查詢語句得到的結(jié)果集使使用用順順序序自自上上而而下下1、純、純Java數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動(數(shù)據(jù)庫驅(qū)動(SQL S
8、erver2005)1)位置)位置需要開發(fā)者下載,并配置需要開發(fā)者下載,并配置項目根目錄項目根目錄WebRootWEB-INFlib2)內(nèi)容)內(nèi)容(對對JDBC底層接口的實現(xiàn)類底層接口的實現(xiàn)類)6.2 JDBC連接數(shù)據(jù)庫的常用方式1、JDBC準備工作準備工作1)下載JDBC數(shù)據(jù)庫驅(qū)動(驅(qū)動由相應的數(shù)據(jù)庫廠商來提供) 例如:SQL Server2005 sqljdbc.jar com.microsoft.sqlserver.jdbc.SQLServerDriver2)配置JDBC數(shù)據(jù)庫驅(qū)動 將sqljdbc.jar文件拷貝到MyEclipse中的web項目的目錄WebRootWEB-INFlib
9、下 (驅(qū)動文件隨項目一起部署,較為規(guī)范)6.3 使用JDBC連接數(shù)據(jù)庫2、JDBC編程步驟編程步驟步驟步驟1:在程序中加載驅(qū)動:在程序中加載驅(qū)動*驅(qū)動程序類:com.microsoft.sqlserver.jdbc.SQLServerDriver*加載方法:Class.forName(驅(qū)動程序類)6.3 使用JDBC連接數(shù)據(jù)庫try try catch (ClassNotFoundException e) catch (ClassNotFoundException e) System.out.println( System.out.println(數(shù)據(jù)庫驅(qū)動加載錯誤數(shù)據(jù)庫驅(qū)動加載錯誤););
10、Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);注意:注意:ClassClass是包是包java.langjava.lang中的一個類中的一個類, ,該類調(diào)用靜態(tài)方法該類調(diào)用靜態(tài)方法forNameforName可以加載驅(qū)動可以加載驅(qū)動, ,該方法拋該方法拋ClassNotFoundExceptionClassNotFoundException異異常,因此需要捕獲異常常,因此需要捕獲異常2、JDBC編程步驟
11、編程步驟步驟步驟2:創(chuàng)建連接對象(連接數(shù)據(jù)庫):創(chuàng)建連接對象(連接數(shù)據(jù)庫)使用DriverManager類的方法getConnection創(chuàng)建連接對象格式格式:Connection conn = DriverManager.getConnection(String uri, String user, String password)參數(shù)說明:參數(shù)說明: uri:要連接的數(shù)據(jù)庫的路徑,根據(jù)數(shù)據(jù)庫不同變化:要連接的數(shù)據(jù)庫的路徑,根據(jù)數(shù)據(jù)庫不同變化 user:登錄數(shù)據(jù)庫的用戶名:登錄數(shù)據(jù)庫的用戶名 password:登錄數(shù)據(jù)庫的密碼:登錄數(shù)據(jù)庫的密碼注意:該方法會拋出注意:該方法會拋出SQLExce
12、ption(SQL異常)異常)6.3 使用JDBC連接數(shù)據(jù)庫步驟步驟2:創(chuàng)建數(shù)據(jù)庫連接對象:創(chuàng)建數(shù)據(jù)庫連接對象6.3 使用JDBC連接數(shù)據(jù)庫String uri= jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;String uri= jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;String user = sa; String password = sa;String user = sa; String password = sa;try Class.forName(com.micr
13、osoft.sqlserver.jdbc.SQLServerDriver);try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);Connection conn = DriverManager.getConnection(uri, user, password)Connection conn = DriverManager.getConnection(uri, user, password);catch (ClassNotFoundException e) catch (ClassNotFoundException e)
14、 System.out.println( System.out.println(數(shù)據(jù)庫驅(qū)動加載錯誤數(shù)據(jù)庫驅(qū)動加載錯誤);); catch (SQLException e) System.out.println( catch (SQLException e) System.out.println(獲取連接錯誤獲取連接錯誤););if (conn != null) System.out.println(if (conn != null) System.out.println(數(shù)據(jù)庫連接成功數(shù)據(jù)庫連接成功););數(shù)據(jù)庫名數(shù)據(jù)庫名服務器服務器ip如果得到空對象說明連接失敗如果得到空對象說明連接失敗2、
15、JDBC編程步驟編程步驟步驟步驟3:發(fā)送:發(fā)送SQL語句到數(shù)據(jù)庫語句到數(shù)據(jù)庫1)創(chuàng)建)創(chuàng)建Statement 作用:作用:Statement對象用于將對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中語句發(fā)送到數(shù)據(jù)庫中 格式:格式:Statement stmt = conn.createSatement()2)執(zhí)行)執(zhí)行SQL語句(調(diào)用語句(調(diào)用Statement的方法)的方法) 查詢方法:查詢方法:public ResultSet executeQuery(String sql) throws SQLException 更新方法:更新方法:public int executeUpdate(String sq
16、l) throws SQLException6.3 使用JDBC連接數(shù)據(jù)庫添加、修改、刪除添加、修改、刪除2、JDBC編程步驟編程步驟步驟步驟3:發(fā)送發(fā)送SQL語句到數(shù)據(jù)庫(例:查詢)語句到數(shù)據(jù)庫(例:查詢)6.3 使用JDBC連接數(shù)據(jù)庫tryString sql = select * from student;Statetment stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);catch() SQL語句語句語句對象語句對象執(zhí)行執(zhí)行SQL說明:此步驟得到的結(jié)果存儲在說明:此步驟得到的結(jié)果存儲在rs結(jié)果集合
17、中,下一步要遍歷結(jié)果集取出數(shù)據(jù)來應用結(jié)果集合中,下一步要遍歷結(jié)果集取出數(shù)據(jù)來應用2、JDBC編程步驟編程步驟步驟步驟4:遍歷展示結(jié)果集1)遍歷行:ResultSet對象的next()方法rs.next()2)遍歷列:通過ResultSet對象的getXXX()方法遍歷行中的列p1356.3 使用JDBC連接數(shù)據(jù)庫游標游標游標游標游標游標游標游標返回類型返回類型方法名稱(根據(jù)字段名稱)方法名稱(根據(jù)字段名稱)返回類型返回類型方法名稱(根據(jù)字段的索引)方法名稱(根據(jù)字段的索引)intgetInt( String FieldName)intgetInt( int colunIndex)float g
18、etFloat(String FieldName)float getFloat(int colunIndex)date getDate(String FieldName)date getDate(int colunIndex)stringgetString(String FieldName)stringgetString(int colunIndex)注意:注意:colunIndex從從1開始計數(shù)開始計數(shù)String sql = select String sql = select * * from student ; from student ;Statetment stmt = conn.
19、createStatement();Statetment stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);ResultSet rs = stmt.executeQuery(sql);while(rs.next()while(rs.next()out.print(out.print(rs.getString(id)rs.getString(id););out.print(out.print(rs.getString(name)rs.getString(name););out.print(out.print(r
20、s.getString(gender)rs.getString(gender); ); out.print(out.print(rs.getInt(age)rs.getInt(age););out.print(rs.getInt(“class);out.print(rs.getInt(“class); out.print(); out.print(); 注意:此時游標停留注意:此時游標停留在當前結(jié)果集的第一在當前結(jié)果集的第一行的前面行的前面注意:此時游標停留在第一行注意:此時游標停留在第一行輸出結(jié)果:在輸出結(jié)果:在jsp頁面中逐行打印出結(jié)果集中的記錄頁面中逐行打印出結(jié)果集中的記錄2、JDBC編
21、程步驟編程步驟步驟步驟5:關(guān)閉數(shù)據(jù)庫連接:關(guān)閉數(shù)據(jù)庫連接1)rs.close( ) 關(guān)閉結(jié)果集關(guān)閉結(jié)果集2)stmt.close( ) 關(guān)閉關(guān)閉statement對象對象3)conn.close() 關(guān)閉關(guān)閉Connection對象對象6.3 使用JDBC連接數(shù)據(jù)庫注意:關(guān)閉數(shù)據(jù)庫連接的順序注意:關(guān)閉數(shù)據(jù)庫連接的順序2、JDBC編程步驟(總結(jié))編程步驟(總結(jié))6.3 使用JDBC連接數(shù)據(jù)庫加載驅(qū)動加載驅(qū)動連接數(shù)據(jù)庫連接數(shù)據(jù)庫發(fā)送發(fā)送SQLSQL語句語句處理返回結(jié)果處理返回結(jié)果關(guān)閉資源關(guān)閉資源Class.forName(com.microsoft.sqlserver.jdbc.SQLServer
22、Driver);Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;Connection conn = DriverManager.getConnection(uri, user, password);Connection conn = DriverManager.getCo
23、nnection(uri, user, password);Statement stmt = conn.createSatement();Statement stmt = conn.createSatement();ResultSet rs = stmt.executeQuery(sql);ResultSet rs = stmt.executeQuery(sql);rs.close();stmt.close();conn.close();rs.close();stmt.close();conn.close();while(rs.next()while(rs.next()out.print(ou
24、t.print(rs.getString(id)rs.getString(id);); 總結(jié)總結(jié)2: JDBC API中重要的接口和類中重要的接口和類 這幾個常用的類和接口都位于包這幾個常用的類和接口都位于包java.sql中,接口的中,接口的實現(xiàn)類為于實現(xiàn)類為于com.microsoft.sqlserver.jdbc中中6.3 使用JDBC連接數(shù)據(jù)庫名稱名稱解釋解釋DriverDriver驅(qū)動程序接口被數(shù)據(jù)庫廠商實現(xiàn),加載后才能連接數(shù)據(jù)庫驅(qū)動程序接口被數(shù)據(jù)庫廠商實現(xiàn),加載后才能連接數(shù)據(jù)庫DrvierManagerDrvierManager(類)(類)處理驅(qū)動的調(diào)入并且對產(chǎn)生新的數(shù)據(jù)庫連接處理
25、驅(qū)動的調(diào)入并且對產(chǎn)生新的數(shù)據(jù)庫連接ConnectionConnection代表對特定數(shù)據(jù)庫的連接代表對特定數(shù)據(jù)庫的連接StatementStatement用于發(fā)送用于發(fā)送SqlSql語句,并接收語句,并接收SqlSql的執(zhí)行結(jié)果的執(zhí)行結(jié)果ResultSetResultSet執(zhí)行查詢語句得到的結(jié)果集執(zhí)行查詢語句得到的結(jié)果集6.3 使用JDBC連接數(shù)據(jù)庫擴展:將數(shù)據(jù)庫操作封裝為一個擴展:將數(shù)據(jù)庫操作封裝為一個javajava類,提高可重用性類,提高可重用性第一步:新建類第一步:新建類DBManager.javaDBManager.java第二步:導包操作第二步:導包操作第三步:編寫類代碼第三步:編
26、寫類代碼publicpublic classclass DBManager DBManager 1 1、定義變量、定義變量2 2、獲取連接方法、獲取連接方法getConnectiongetConnection3 3、執(zhí)行查詢方法、執(zhí)行查詢方法executeQueryexecuteQuery4 4、釋放資源的方法、釋放資源的方法releaseSourcereleaseSource 6.3 使用JDBC連接數(shù)據(jù)庫 1、定義變量、定義變量 private Connection conn = null; private Statement stmt = null; private ResultSet
27、rs = null; private String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school; private String user = sa; private String password = 123456;6.3 使用JDBC連接數(shù)據(jù)庫 2、編寫獲取數(shù)據(jù)庫連接對象的方法、編寫獲取數(shù)據(jù)庫連接對象的方法 public Connection getConnection() try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); conn = Dri
28、verManager.getConnection(uri,user,password); if(conn!=null) System.out.println(數(shù)據(jù)庫鏈接獲取成功數(shù)據(jù)庫鏈接獲取成功); catch(ClassNotFoundException e) System.out.println(驅(qū)動程序加載異常驅(qū)動程序加載異常); catch(SQLException e) System.out.println(獲取連接異常獲取連接異常); e.printStackTrace();/打印堆棧跟蹤打印堆棧跟蹤 return conn;6.3 使用JDBC連接數(shù)據(jù)庫 3、編寫獲取查詢結(jié)果集的
29、方法、編寫獲取查詢結(jié)果集的方法 public ResultSet executeQuery(String sql) try stmt = conn.createStatement(); rs = stmt.executeQuery(sql); catch (SQLException e) System.out.println(SQL執(zhí)行錯誤執(zhí)行錯誤); e.printStackTrace();/打印堆棧跟蹤打印堆棧跟蹤 return rs; 6.3 使用JDBC連接數(shù)據(jù)庫 4、編寫釋放數(shù)據(jù)庫資源的方法、編寫釋放數(shù)據(jù)庫資源的方法 public void releaseSource() try i
30、f(rs!=null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); catch (SQLException e) e.printStackTrace(); 順序查詢順序查詢* 簡單查詢* select * from student* 條件查詢* select * from student where age=23* select * from student where age between 23 and 40* 排序查詢* select * from student order by jspsc
31、ore * select * from student order by jspscore asc* select * from student order by jspscore desc 6.4 JDBC數(shù)據(jù)庫查詢 age=23 and age=40按照按照jspscore排序排序 默認升序默認升序按照按照jspscore排序排序 升序升序按照按照jspscore排序排序 降序降序 模糊查詢模糊查詢* select * from student where name like 張%* 張、張三、張曉曉第一個字符是“張”* select * from student where name l
32、ike 張_* 張三、張曉包含兩個字符,且第一個字符是“張”* select * from student where name like %小%* 張小青、王小紅、李小麗包含字符“小” 練習* 寫出SQL語句查詢t1表中content字段包含“java”,并且倒數(shù)第2個字符為E的記錄* select * from t1 where content like %java%E_6.4 JDBC數(shù)據(jù)庫查詢 學生練習時間。學生練習時間。6.4 JDBC數(shù)據(jù)庫查詢DBManager: executeQueryquery1.jsp (簡單查詢簡單查詢)條件查詢條件查詢模糊查詢模糊查詢排序查詢排序查詢6.
33、4 JDBC數(shù)據(jù)庫查詢 綜合練習綜合練習1-1-條件查詢(結(jié)合表單來實現(xiàn)查詢)條件查詢(結(jié)合表單來實現(xiàn)查詢) 請輸入學生的成績請輸入學生的成績 form action=/query/query.jsp method=get 學生成績在學生成績在 到到之間的學生記錄是之間的學生記錄是 student.jspquery.jspStatement對象調(diào)用方法:對象調(diào)用方法:*public int executeUpdate(String sqlStatement);*返回的是影響的行數(shù),若返回0,則說明更新操作失敗SQL語句語句*添加記錄insert1)insert into test values
34、(zhangsan, 23) 2)insert into test(name) values(lisi)*修改記錄update1)update test set age=40 where name=zhangsan*刪除記錄delete2)delete from test where name=zhangsan6.5 更新、添加與刪除 SQL語句語句* 注意:字符串拼接技巧6.5 更新、添加與刪除以插入記錄的以插入記錄的SQLSQL為例,為例,插入記錄操作時,變量插入記錄操作時,變量varvar中存儲著字段的值,中存儲著字段的值,首先:寫好首先:寫好insert into student va
35、lues ( )insert into student values ( ) 然后然后(1 1)見到字符串類型的字段,)見到字符串類型的字段,sqlsql中就拼中就拼”+var+var+”, ,(2 2)見到數(shù)據(jù)類型的字段,)見到數(shù)據(jù)類型的字段,sqlsql中就拼中就拼”+var+var+”最后形成:最后形成:insert into student values(+id+,+name+,+age+,+jspscore+);insert into student values(+id+,+name+,+age+,+jspscore+);案例:案例:insert1.jsp insert1Handl
36、e.jspinsert1.jsp insert1Handle.jsp6.5 更新、添加與刪除 綜合練習綜合練習2-2-添加記錄添加記錄6.5 更新、添加與刪除 綜合練習綜合練習3-3-更新記錄(刪除和修改)更新記錄(刪除和修改)數(shù)據(jù)庫綜合練習query.jsp結(jié)果展示頁面結(jié)果展示頁面updateForm.jsp表單表單1、接參數(shù)、接參數(shù)id2、查詢數(shù)據(jù)庫、查詢數(shù)據(jù)庫3、顯示到表單中、顯示到表單中(或者是接收到所有字段信息)(或者是接收到所有字段信息)updateHandle.jsp添加處理頁面添加處理頁面1、接參數(shù)、接參數(shù)2、更新到數(shù)據(jù)庫、更新到數(shù)據(jù)庫3、跳轉(zhuǎn)、跳轉(zhuǎn)deleteHandle.j
37、sp刪除處理頁面刪除處理頁面1、接參數(shù)、接參數(shù)id2、刪除數(shù)據(jù)庫、刪除數(shù)據(jù)庫3、跳轉(zhuǎn)、跳轉(zhuǎn)addForm.jsp表單表單addHandle.jsp添加處理頁面添加處理頁面1、接參數(shù)、接參數(shù)2、添加到數(shù)據(jù)庫、添加到數(shù)據(jù)庫3、跳轉(zhuǎn)、跳轉(zhuǎn)addHandle.jsp添加處理頁面添加處理頁面1、接參數(shù)、接參數(shù)2、添加到數(shù)據(jù)庫、添加到數(shù)據(jù)庫3、跳轉(zhuǎn)、跳轉(zhuǎn)批量刪除query.jsp結(jié)果展示頁面結(jié)果展示頁面deleteAll.jsp批量刪除處理頁面批量刪除處理頁面1、接、接id參數(shù)(接收到數(shù)組)參數(shù)(接收到數(shù)組)2、使用、使用for循環(huán)拼接循環(huán)拼接delete語句語句3、執(zhí)行批量刪除語句、執(zhí)行批量刪除語句4、
38、跳轉(zhuǎn)到、跳轉(zhuǎn)到query頁面頁面 數(shù)據(jù)庫綜合練習添加功能添加功能刪除功能刪除功能修改功能修改功能展示頁面展示頁面 form action=/add/addHandle.jsp method=get 學號:學號: 姓名:姓名: 年齡:年齡: 成績:成績: addForm.jspaddHandle.jsp 以下是查詢結(jié)果以下是查詢結(jié)果 form action=/delete/deleteAll.jsp 選擇選擇id名字名字年齡年齡分數(shù)分數(shù)操作操作 input type=checkbox name=deleteAll value=/ a href=/update/updateForm.jsp?id=
39、&name=&age=&jspScore=修改修改 a href=/delete/delete.jsp?id=刪除刪除 query.jsp接收參數(shù),并顯示在表單中接收參數(shù),并顯示在表單中提交表單時,交給提交表單時,交給updateHandle.jsp處理處理顯示當前記錄顯示當前記錄id值,不允許修改值,不允許修改顯示當前記錄姓名顯示當前記錄姓名顯示當前記錄年齡顯示當前記錄年齡顯示當前記錄成績顯示當前記錄成績updateForm.jspupdateHandle.jsp 關(guān)于批量刪除思路關(guān)于批量刪除思路接收到的是接收到的是StringString類型的數(shù)組,數(shù)組中存放了記錄
40、的類型的數(shù)組,數(shù)組中存放了記錄的idid值值1 1)delete from student where id in(id1,id2,id3delete from student where id in(id1,id2,id3) )2 2)在循環(huán)中執(zhí)行)在循環(huán)中執(zhí)行deletedelete語句語句deleteHandle.jsp通過超鏈接傳遞參數(shù)的寫法 a href=/updateanddelete/updateForm.jsp?id=&name=&age=&jspscore=修改修改 a href=/updateanddelete/deleteHandle.jsp?id
41、=刪除刪除1 1、隨機查詢、隨機查詢(參考教材中(參考教材中P139-143P139-143)1 1)順序查詢:結(jié)果集游標只能順序向前移動。)順序查詢:結(jié)果集游標只能順序向前移動。 使用使用ResultSetResultSet結(jié)果集只能夠執(zhí)行順序查詢結(jié)果集只能夠執(zhí)行順序查詢rs.next()rs.next()方法方法6.6 JDBC隨機查詢滾動結(jié)果集游標游標游標游標游標游標游標游標ResultSetResultSet結(jié)果集合只支持游標順序的依次結(jié)果集合只支持游標順序的依次下移下移,不能不能夠后退,也不能夠隨機的定位。(只進的夠后退,也不能夠隨機的定位。(只進的ResultSetResultSe
42、t)1) stmt = conn.createStatement();2) rs = stmt.executeQuery(sql);游標游標1 1、隨機查詢、隨機查詢(參考教材中(參考教材中P139-143P139-143)2 2)隨機查詢:結(jié)果集游標可以隨意的滾動和定位)隨機查詢:結(jié)果集游標可以隨意的滾動和定位 例:假設數(shù)據(jù)庫中記錄是按照例:假設數(shù)據(jù)庫中記錄是按照“學號學號”字段排序的,在頁面字段排序的,在頁面中中 按照下圖所示順序輸出記錄按照下圖所示順序輸出記錄6.6 JDBC隨機查詢滾動結(jié)果集第第4條條第第3條條第第1條條第第1條條進行隨機查詢需要進行隨機查詢需要支持滾動的結(jié)果集支持滾動
43、的結(jié)果集3)獲取可滾動結(jié)果集的方法)獲取可滾動結(jié)果集的方法 Statement stmtconn.createStatement(int type,int Concurrency) rs = stmt.executeQuery(sql);(1 1)TypeType取值決定滾動方式取值決定滾動方式 ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_FORWARD_ONLY:游標只能向前滾動:游標只能向前滾動 ResultSet.TYPE_SCROLL_INSENSITIVE ResultSet.TYPE_SCROLL_INSENSITIVE :游標可以前后滾動,
44、不敏感:游標可以前后滾動,不敏感 ResultSet.TYPE_SCROLL_SENSITIVE ResultSet.TYPE_SCROLL_SENSITIVE :游標可以前后滾動,敏感游標可以前后滾動,敏感(2 2)ConcurrencyConcurrency決定是否可以用結(jié)果集更新數(shù)據(jù)庫決定是否可以用結(jié)果集更新數(shù)據(jù)庫 ResultSet.CONCUR_READ_ONLY ResultSet.CONCUR_READ_ONLY :不能用結(jié)果集更新數(shù)據(jù):不能用結(jié)果集更新數(shù)據(jù) ResultSet.CONCUR_UPDATABLEResultSet.CONCUR_UPDATABLE:可以用結(jié)果集更新
45、數(shù)據(jù):可以用結(jié)果集更新數(shù)據(jù)6.6 JDBC隨機查詢滾動結(jié)果集1、隨機查詢、隨機查詢(1 1)TypeType取值決定滾動方式取值決定滾動方式ustaticintTYPE_SCROLL_INSENSITIVETheconstantindicatingthetypeforaResultSetobjectthatisscrollablebutgenerallynotsensitivetochangesmadebyothers.ustaticintTYPE_SCROLL_SENSITIVETheconstantindicatingthetypeforaResultSetobjectthatisscro
46、llableandgenerallysensitivetochangesmadebyothers.6.6 JDBC隨機查詢滾動結(jié)果集對數(shù)據(jù)庫中對數(shù)據(jù)庫中updateupdate操作是否敏感,即有另外的事務更新了數(shù)據(jù)庫操作是否敏感,即有另外的事務更新了數(shù)據(jù)庫中的記錄,則已經(jīng)取出的中的記錄,則已經(jīng)取出的ResultSetResultSet中相應記錄也會變化。中相應記錄也會變化。 6.6 JDBC隨機查詢滾動結(jié)果集1、隨機查詢、隨機查詢(1 1)TypeType取值決定滾動方式取值決定滾動方式A線程:線程:1)查詢)查詢2)在頁面上展示)在頁面上展示B線程:線程:1)更新)更新2)在頁面上展示)在頁
47、面上展示內(nèi)存:內(nèi)存:ResultSet(在線)(在線)更新了數(shù)據(jù)表的某條記錄更新了數(shù)據(jù)表的某條記錄如果如果ResultSetResultSet是敏感的(是敏感的(TYPE_SCROLL_SENSITIVETYPE_SCROLL_SENSITIVE),),則則ResultSetResultSet會自動更新數(shù)據(jù),否則,會自動更新數(shù)據(jù),否則,A A看到的將不是看到的將不是最新的數(shù)據(jù)庫中的數(shù)據(jù)最新的數(shù)據(jù)庫中的數(shù)據(jù)1、隨機查詢、隨機查詢(2 2)ConcurrencyConcurrency決定是否可以用結(jié)果集更新數(shù)據(jù)庫決定是否可以用結(jié)果集更新數(shù)據(jù)庫 ResultSet.CONCUR_READ_ONLY
48、ResultSet.CONCUR_READ_ONLY :不能用結(jié)果集更新數(shù)據(jù):不能用結(jié)果集更新數(shù)據(jù) ResultSet.CONCUR_UPDATABLEResultSet.CONCUR_UPDATABLE:可以用結(jié)果集更新數(shù)據(jù):可以用結(jié)果集更新數(shù)據(jù)例:創(chuàng)建一個支持滾動的敏感結(jié)果集,可以使用結(jié)果集更新數(shù)據(jù)庫例:創(chuàng)建一個支持滾動的敏感結(jié)果集,可以使用結(jié)果集更新數(shù)據(jù)庫6.6 JDBC隨機查詢滾動結(jié)果集stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs = stmt.exe
49、cuteQuery(sql);1、隨機查詢、隨機查詢(2 2)ConcurrencyConcurrency決定是否可以用結(jié)果集更新數(shù)據(jù)庫決定是否可以用結(jié)果集更新數(shù)據(jù)庫 ResultSet.CONCUR_UPDATABLEResultSet.CONCUR_UPDATABLE:可以用結(jié)果集更新數(shù)據(jù):可以用結(jié)果集更新數(shù)據(jù) 方法方法1:void updateString(String columnLabel, String x) throws SQLException; 例:例:rs.updateString(id,0011); 方法方法2:void updateString(int columnIn
50、dex, String x) throws SQLException; 例:例:rs.updateString(2,小王小王); 方法方法3 3:void updateRow() throws SQLException; 提交更新提交更新6.6 JDBC隨機查詢滾動結(jié)果集 /更新結(jié)果集合示例更新結(jié)果集合示例 rs.first();/將游標移動到第一行將游標移動到第一行 rs.updateString(“id”,“0011”);/設置更新的設置更新的id字段值字段值 rs.updateString(2,“小王小王”);/設置更新的設置更新的name字段值字段值 rs.updateRow();/提
51、交更新提交更新數(shù)據(jù)庫表字段索引,從數(shù)據(jù)庫表字段索引,從1開始開始1232 2、rsrs對象的常用方法對象的常用方法1 1)rsrs.next().next() 游標前進游標前進2 2)rsrs.previous() .previous() 游標向前移動一次,若游標指向第一行時,調(diào)用該游標向前移動一次,若游標指向第一行時,調(diào)用該方法返回方法返回falsefalse,指向其他行時,調(diào)用返回,指向其他行時,調(diào)用返回truetrue3 3)rsrs.first().first()、rsrs.last().last()游標定位到第一條和最后一條記錄游標定位到第一條和最后一條記錄4 4)rsrs.abso
52、lute(int row) .absolute(int row) 游標指定移動到某行游標指定移動到某行5 5)rsrs.isBeforeFirst().isBeforeFirst()、rsrs.isAfterLast().isAfterLast()、rsrs.isFirst().isFirst()、 rsrs.isLast().isLast()6 6)rsrs.getRow() .getRow() 返回當前游標指向的行號,行號從返回當前游標指向的行號,行號從1 1開始開始* 示例:chap06/scroolRS/scroolRS.jsp6.6 JDBC隨機查詢滾動結(jié)果集/*支持可滾動結(jié)果集的查
53、詢方法(添加到支持可滾動結(jié)果集的查詢方法(添加到DBManager中)中) * param sql * return */public ResultSet scollExecuteQuery(String sql)try stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs = stmt.executeQuery(sql); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrac
54、e();return rs; 學生練習時間。學生練習時間。6.6 JDBC隨機查詢滾動結(jié)果集滾動結(jié)果集練習滾動結(jié)果集練習* chap06/scroolRS/scroolRS.jsp滾動結(jié)果集的應用滾動結(jié)果集的應用思考題:思考題:* 如何獲取數(shù)據(jù)庫中某個表(student)中的記錄數(shù)?* 1)遍歷rs結(jié)果集,使用局部變量count+* 2)使用select count(*) as count from user1 查詢出計算字段,并命名為count,再利用rs.getString(1),將其獲取出來* 3)使用可滾動的結(jié)果集,rs.last(); rs.getRow();6.6 JDBC隨機查詢
55、滾動結(jié)果集6.6 JDBC隨機查詢滾動結(jié)果集/方法一和方法三方法一和方法三trytry Class. Class.forNameforName( (com.microsoft.sqlserver.jdbc.SQLServerDrivercom.microsoft.sqlserver.jdbc.SQLServerDriver);); Connection conn = DriverManager. Connection conn = DriverManager.getConnectiongetConnection(uri,(uri,sasa, ,65077256507725);); Statem
56、ent stmt = conn.createStatement(); Statement stmt = conn.createStatement(); String sql = String sql = select select * * from student from student; ; ResultSet rs = stmt.executeQuery(sql); ResultSet rs = stmt.executeQuery(sql); int int rowCount = 0; rowCount = 0; while while(rs.next()(rs.next() rowCo
57、unt+; rowCount+; System. System.outout.println(.println(userInfouserInfo表總共行數(shù)為表總共行數(shù)為: + rowCount); + rowCount); catchcatch (ClassNotFoundException e) (ClassNotFoundException e) catchcatch (SQLException e) (SQLException e) 注意:這種實現(xiàn)方法有個弊端,如果此時想對注意:這種實現(xiàn)方法有個弊端,如果此時想對rsrs的結(jié)果集進行操作,是沒有辦法的的結(jié)果集進行操作,是沒有辦法的。因為游
58、標已經(jīng)停留在最后一行之后,最好使用支持滾動的結(jié)果集,重新將游標放。因為游標已經(jīng)停留在最后一行之后,最好使用支持滾動的結(jié)果集,重新將游標放到第一行。到第一行。rs.first();rs.getRow();Statement stmt = conn.createStatement(ResultSet.Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVETYPE_SCROLL_INSENSITIVE, , ResultSet. ResultSet.CONCUR_READ_ONLYCONCUR_READ_ONLY
59、);); 思考題思考題6.6 JDBC隨機查詢滾動結(jié)果集/方法二方法二String uri = String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=schooljdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school; ;trytry Class. Class.forNameforName( (com.microsoft.sqlserver.jdbc.SQLServerDrivercom.microsoft.sqlserver.jdbc.SQLServerDriver);); Connec
60、tion conn = DriverManager. Connection conn = DriverManager.getConnectiongetConnection(uri,(uri,sasa, ,65077256507725);); Statement stmt = conn.createStatement(); Statement stmt = conn.createStatement(); String sql = select count(String sql = select count(* *) as count from student;) as count from student; ResultSet rs =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學二年級數(shù)學口算題上冊
- 2022年新課標八年級上冊道德與法治《第九課 樹立總體國家安全觀 》聽課評課記錄(2課時)
- 9-1生活需要法律 2法律保障生活 聽課評課記錄 新部編人教版七年級下冊道德與法治
- 人教版地理七年級上冊第四節(jié)《世界的氣候》聽課評課記錄5
- 華師大版歷史九年級上冊第16課《啟蒙運動》聽課評課記錄
- 戶外廣告制作合同范本
- 三方委托出口合同范本
- 二零二五年度知乎共享空間租賃合作協(xié)議
- SBS防水卷材購貨合同范本
- 公司租賃合同范本
- 電力兩票培訓
- TCCEAS001-2022建設項目工程總承包計價規(guī)范
- 2024.8.1十七個崗位安全操作規(guī)程手冊(值得借鑒)
- 二次供水衛(wèi)生管理制度及辦法(4篇)
- 中學生手機使用管理協(xié)議書
- 給排水科學與工程基礎(chǔ)知識單選題100道及答案解析
- 2024年土地變更調(diào)查培訓
- 2024年全國外貿(mào)單證員鑒定理論試題庫(含答案)
- 新版中國食物成分表
- DB11∕T 446-2015 建筑施工測量技術(shù)規(guī)程
- 運輸車輛掛靠協(xié)議書(15篇)
評論
0/150
提交評論