版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JSP實(shí)用教程(第三版)配合JSP實(shí)用教程(第三版)例子源代碼一起使用例子源代碼一起使用Power Point 制作 張躍平 耿祥義第第7章章 JSP中使用數(shù)據(jù)庫(kù)中使用數(shù)據(jù)庫(kù)2021-10-292 本章主要內(nèi)容本章主要內(nèi)容7.1 MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)7.2 JDBC7.3 連接連接MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)7.4 查詢記錄查詢記錄7.5 更新、添加與刪除記錄更新、添加與刪除記錄7.6 用結(jié)果集操作數(shù)據(jù)庫(kù)中的表用結(jié)果集操作數(shù)據(jù)庫(kù)中的表7.7 預(yù)處理語(yǔ)句預(yù)處理語(yǔ)句7.8 事務(wù)事務(wù)7.9 分頁(yè)顯示記錄分頁(yè)顯示記錄7.10 常見(jiàn)數(shù)據(jù)庫(kù)連接常見(jiàn)數(shù)據(jù)庫(kù)連接7.11 標(biāo)準(zhǔn)化考試標(biāo)準(zhǔn)化考試202
2、1-10-2937.1 MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng) MySQL數(shù)據(jù)庫(kù)管理系統(tǒng),簡(jiǎn)稱MySQL,是世界上最流行的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng),其社區(qū)版(MySQL Community Edition)是世界上最流行的免費(fèi)下載的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng)。 目前許多Web開(kāi)發(fā)項(xiàng)目都選用MySQL,其主要原因是MySQL的社區(qū)版(MySQL Community Edition)性能卓越,滿足許多Web應(yīng)用已經(jīng)綽綽有余,而且MySQL的社區(qū)版是開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng)、可以降低軟件的開(kāi)發(fā)和使用成本.2021-10-294 1.下載下載 登錄后選擇導(dǎo)航條上的products,在出現(xiàn)的頁(yè)面的左側(cè)選擇“MySQL Co
3、mmunity Edition”或在出現(xiàn)的頁(yè)面的右側(cè)選擇“下載MySQL社區(qū)版”。如圖7.1所示意。 7.1.1 下載、安裝與啟動(dòng)下載、安裝與啟動(dòng)MySQL2. 安裝安裝 將下載的mysql-5.6.16-win32.zip解壓縮到本地計(jì)算機(jī)即可,比如解壓縮到D:。形成的安裝目錄結(jié)構(gòu)如圖7.2。3.啟動(dòng)啟動(dòng) 打開(kāi)MS-DOS命令行窗口,進(jìn)入到bin目錄中,執(zhí)行MySQL安裝目錄的bin子目錄中的mysqld.exe文件: 即在命令行鍵入: mysqld 或 mysqld -nt啟動(dòng)MySQL數(shù)據(jù)庫(kù)服務(wù)器。啟動(dòng)成功,MySQL數(shù)據(jù)庫(kù)服務(wù)器將占用當(dāng)前MS-DOS窗口,如圖7.3所示。2021-10
4、-295 7.1.2 建立數(shù)據(jù)庫(kù)建立數(shù)據(jù)庫(kù) 啟動(dòng)MySQL數(shù)據(jù)庫(kù)服務(wù)器后,就可以建立數(shù)據(jù)庫(kù),并在數(shù)據(jù)庫(kù)中創(chuàng)建表。 可以下載圖形界面的MySQL管理工具,并使用該工具進(jìn)行創(chuàng)建數(shù)據(jù)庫(kù)、在數(shù)據(jù)庫(kù)中創(chuàng)建表等操作,MySQL管理工具有免費(fèi)的也有需要購(gòu)買(mǎi)的。 也可以使用MySQL提供的命令行工具進(jìn)行創(chuàng)建數(shù)據(jù)庫(kù)、在數(shù)據(jù)庫(kù)中創(chuàng)建表等操作2021-10-29 1使用使用MySQL管理工具管理工具可以登錄:http:/ 啟動(dòng)navicat for MySQL 出現(xiàn)如圖7.4所示界面 。我們建立的連接名稱是gengxiangyi,用戶名取root,密碼是空,MySQL服務(wù)器占用的端口是3306,如圖7.5。(2)建
5、立數(shù)據(jù)庫(kù))建立數(shù)據(jù)庫(kù) 在新建的連接(gengxiangyi)上單擊鼠標(biāo)右鍵,然后選擇“新建數(shù)據(jù)庫(kù)”,在彈出的新建數(shù)據(jù)庫(kù)對(duì)話框中輸入,選擇有關(guān)信息.如圖7.6所示.(3)創(chuàng)建表)創(chuàng)建表 在其“表”選擇項(xiàng)上單擊鼠標(biāo)右鍵,選擇“新建表”,將出現(xiàn)創(chuàng)建表的對(duì)話框。如圖7.7所示以及7.8所示。2021-10-297 2使用使用MySQL監(jiān)視器監(jiān)視器 MySQL提供的監(jiān)視器(MySQL monitor),允許用戶使用命令行方式管理數(shù)據(jù)庫(kù)。如果讀者有比較好的數(shù)據(jù)庫(kù)知識(shí),特別是SQL語(yǔ)句的知識(shí),那么使用命令行方式管理MySQL數(shù)據(jù)庫(kù)也是很方便的. 需要再打開(kāi)一個(gè)MS-DOS命令行窗口,并使用MS-DOS命令進(jìn)
6、入到bin目錄中,然后使用默認(rèn)的root用戶啟動(dòng)MySQL監(jiān)視器(在安裝MySQL時(shí)root用戶是默認(rèn)的一個(gè)用戶,沒(méi)有密碼)。命令如下: mysql u root如圖7.9所示2021-10-298 (1) 創(chuàng)建數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù) 啟動(dòng)MySQL監(jiān)視器后就可以使用SQL語(yǔ)句進(jìn)行創(chuàng)建數(shù)據(jù)庫(kù)、建表等操作。在MS-DOS命令行窗口輸入SQL語(yǔ)句需要用語(yǔ)句需要用“;”號(hào)結(jié)束號(hào)結(jié)束,在編輯SQL語(yǔ)句的過(guò)程中可以使用c終止當(dāng)前SQL語(yǔ)句的編輯。需要提醒的是,可以把一個(gè)完整的SQL語(yǔ)句命令分成幾行來(lái)輸入,最后用分號(hào)作結(jié)束標(biāo)志即可。 使用MySQL監(jiān)視器創(chuàng)建一個(gè)名字為Book的數(shù)據(jù)庫(kù),在當(dāng)前MySQL監(jiān)視器占用
7、的命令行窗口輸入創(chuàng)建數(shù)據(jù)庫(kù)的SQL語(yǔ)句:create database Book;(如圖7.10所示意)2021-10-299 (2) 為數(shù)據(jù)庫(kù)建表為數(shù)據(jù)庫(kù)建表u 首先進(jìn)入該數(shù)據(jù)庫(kù)(即使用數(shù)據(jù)庫(kù)): use Book如圖7.11所示意。u在數(shù)據(jù)庫(kù)Book建立一個(gè)名字為bookList表:(如圖7.12)CREATE TABLE bookList ( ISBN varchar(100) not null , name varchar(100) CHARACTER SET gb2312, price float , PRIMARY KEY (ISBN); u插入記錄的SQL語(yǔ)句:(如圖7.13)i
8、nsert into bookList values(7-302-01465-5,高等數(shù)學(xué)高等數(shù)學(xué),28.67); u查詢記錄的SQL語(yǔ)句(圖7.14) select * from bookList;2021-10-2910 ( (3)導(dǎo)入)導(dǎo)入.sql文件中的文件中的SQL語(yǔ)句語(yǔ)句 可以事先將需要的SQL語(yǔ)句保存在一個(gè)擴(kuò)展名是.sql的文本文件中,然后在MySQL監(jiān)視器占用的命令行窗口使用source命令導(dǎo)入.sql的文本文件中的SQL語(yǔ)句. drop table carList ;create table carList(number char(60) CHARACTER SET gb23
9、12 not null,name char(50) CHARACTER SET gb2312 ,price float,year date,PRIMARY KEY(number);insert into carList values(加A89CQ8,奔馳,820000,2015-12-26);insert into carList values(洲C12456,寶馬,620000,2015-10-10);select * from carList;然后在當(dāng)前MySQL監(jiān)視器占用的命令行窗口鍵入如下命令:source d:/1000/group.sqlsource d:/1000/group.s
10、ql導(dǎo)入SQL語(yǔ)句,如圖7.15 。 group.sql文本文件的內(nèi)容如下:文本文件的內(nèi)容如下:2021-10-2911刪除數(shù)據(jù)庫(kù)的命令刪除數(shù)據(jù)庫(kù)的命令:drop database ,例如:刪除名為tiger的數(shù)據(jù)庫(kù): drop database tiger;刪除表的命令刪除表的命令:drop table ,例如,使用book數(shù)據(jù)庫(kù)后,執(zhí)行 drop table booklist;將刪除book數(shù)據(jù)庫(kù)中的bookList表。 (4)刪除數(shù)據(jù)庫(kù)或表)刪除數(shù)據(jù)庫(kù)或表2021-10-29127.2 JDBC JDBC(Java DataBase Connectivity)提供了訪問(wèn)數(shù)據(jù)庫(kù)的API,即
11、由一些Java類和接口組成,是Java運(yùn)行平臺(tái)的核心類庫(kù)中的一部分。在JSP中可以使用JDBC實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中表的記錄的查詢、修改和刪除等操作。如圖7.16所示意我們經(jīng)常使用JDBC進(jìn)行如下的操作:與一個(gè)數(shù)據(jù)庫(kù)建立連接。向已連接的數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句。1. 處理SQL語(yǔ)句返回的結(jié)果。2021-10-2913 使用JDBC-數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序方式和數(shù)據(jù)庫(kù)建立連接需要經(jīng)過(guò)2個(gè)步驟:7.3 連接連接MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)加載加載JDBC-數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序和指定的數(shù)據(jù)庫(kù)建立連接和指定的數(shù)據(jù)庫(kù)建立連接如圖7.17所示意2021-10-2914 教材下載的是mysql-connector-java-
12、5.1.28.zip,將該zip文件解壓至硬盤(pán),在解壓后的目錄下的mysql-connector-java-5.1.28-bin.jar文件就是連接MySQL數(shù)據(jù)庫(kù)的JDBC-數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。將該驅(qū)動(dòng)程序復(fù)制到Tomcat服務(wù)器所使用的JDK的擴(kuò)展目錄中(即java_home環(huán)境變量指定的JDK,見(jiàn)第1章的1.2),比如:D:jdk1.7jrelibext或復(fù)制到Tomcat服務(wù)器安裝目錄的commonlib文件夾中,比如:D:apache-tomcat-8.0.3commonlib 7.3.1加載加載JDBC-數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序加載MySQL的JDBC-數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序代碼如下:tr
13、y try Class.forName(com.mysql.jdbc.Driver);Class.forName(com.mysql.jdbc.Driver); catch(Exception e)catch(Exception e)2021-10-2915 為了能和MySQL數(shù)據(jù)庫(kù)服務(wù)器管理的數(shù)據(jù)庫(kù)建立連接,必須保證該MySQL數(shù)據(jù)庫(kù)服務(wù)器已經(jīng)啟動(dòng),如果沒(méi)有更改過(guò)MySQL數(shù)據(jù)庫(kù)服務(wù)器的配置,那么該數(shù)據(jù)庫(kù)服務(wù)器占用的端口是3306。假設(shè)MySQL數(shù)據(jù)庫(kù)服務(wù)器所駐留的計(jì)算機(jī)的IP地址是 7.3.2 建立連接建立連接_1使用 Connection getConnecti
14、on(String,String,String)方法建立連接的代碼如下:try String uri = jdbc:mysql:/ :3306/warehouse; String user =root; String password =99; con = DriverManager.getConnection(uri,user,password); catch(SQLException e) System.out.println(e);2021-10-2916 7.3.2建立連接建立連接_2 使用Connection getConnection(String) 方法
15、建立連接的代碼如下:try String uri = jdbc:mysql:/:3306/warehouse?user=root&password=99; con = DriverManager.getConnection(uri); catch(SQLException e) System.out.println(e);如果root用戶沒(méi)有設(shè)置密碼,那么將上述uri中的&password=99更改為:&password= 2021-10-2917 7.3.2建立連接建立連接_3 避免操作數(shù)據(jù)庫(kù)出現(xiàn)中文亂碼(細(xì)節(jié)見(jiàn)稍后的7.3.3),那么需要使
16、用 Connection getConnection(String) 方法建立連接,連接代碼是(假設(shè)用戶是root,其密碼是99):String uri = jdbc:mysql://warehouse?+ user=root&password=99&characterEncoding=gb2312;con = DriverManager.getConnection(uri); 用戶要和連接MySQL駐留在同一計(jì)算機(jī)上,使用的IP地址可以是或localhost。另外,由于3306是MySQL數(shù)據(jù)庫(kù)服務(wù)器的默認(rèn)端口號(hào),鏈接數(shù)據(jù)庫(kù)時(shí)允許應(yīng)用程序省
17、略默認(rèn)的3360端口號(hào).2021-10-2918 7.3.3 MySQL亂碼解決方案亂碼解決方案_11數(shù)據(jù)庫(kù)和表使用支持中文的字符編碼 在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指定數(shù)據(jù)庫(kù)使用的字符編碼: create 數(shù)據(jù)庫(kù)名數(shù)據(jù)庫(kù)名 CHARACTER SET字符編碼字符編碼 創(chuàng)建表時(shí),可以指定某個(gè)字段使用的字符編碼: 字段名字段名 類型類型 CHARACTER SET字符編碼字符編碼例如:create people CHARACTER SET gb2312create table myList (id int, name varchar(100) CHARACTER SET gb2312,PRIMARY KEY (
18、id);2021-10-2919 7.3.3 MySQL亂碼解決方案亂碼解決方案_22連接數(shù)據(jù)庫(kù)支持中文編碼連接數(shù)據(jù)庫(kù)支持中文編碼JSP中連接MySQL數(shù)據(jù)庫(kù)時(shí),需要使用Connection getConnection(java.lang.String) 方法建立連接,而且向該方法參數(shù)傳遞的字符串是:“jdbc:mysql:/地址/數(shù)據(jù)庫(kù)?user=用戶&password=密碼 &characterEncoding=gb2312characterEncoding=gb2312;2021-10-2920 例子例子7_17_1 例子1是一個(gè)簡(jiǎn)單的JSP頁(yè)面,該頁(yè)面中的Java程序片
19、代碼負(fù)責(zé)加載JDBC-驅(qū)動(dòng)程序,并連接到數(shù)據(jù)庫(kù)warehouse,查詢product表中全部記錄(見(jiàn)7.1節(jié)曾建立的warehouse數(shù)據(jù)庫(kù)),頁(yè)面運(yùn)行效果如圖7.18。 2021-10-29217.4 查詢記錄查詢記錄 和數(shù)據(jù)庫(kù)建立連接后,就可以使用JDBC提供的API和數(shù)據(jù)庫(kù)交互信息。比如查詢、修改和更新數(shù)據(jù)庫(kù)中的表等。 JDBC和數(shù)據(jù)庫(kù)表進(jìn)行交互的主要方式是使用SQL語(yǔ)句(其它方式見(jiàn)7.8節(jié)),JDBC提供的API可以將標(biāo)準(zhǔn)的SQL語(yǔ)句發(fā)送給數(shù)據(jù)庫(kù),實(shí)現(xiàn)和數(shù)據(jù)庫(kù)的交互。2021-10-2922 7.4.1 結(jié)果集與查詢結(jié)果集與查詢_11SQL查詢語(yǔ)句與結(jié)果集查詢語(yǔ)句與結(jié)果集讓連接對(duì)象co
20、n調(diào)用方法createStatement()創(chuàng)建這個(gè)SQL語(yǔ)句對(duì)象:try Statement sql=con.createStatement(); catch(SQLException e ) System.out.println(e); 對(duì)于 ResultSet rs=sql.executeQuery(SELECT * FROM product);內(nèi)存的結(jié)果集對(duì)象rs的列數(shù)是4列,剛好和product的列數(shù)相同.2021-10-2923 7.4.1 結(jié)果集與查詢結(jié)果集與查詢_2對(duì)于ResultSet rs=sql.executeQuery(SELECT name,price FROM pr
21、oduct);內(nèi)存的結(jié)果集對(duì)象rs只有兩列,第1列是name列、第2列是price列。 ResultSet結(jié)果集一次只能看到一個(gè)數(shù)據(jù)行,使用next()方法走到下一數(shù)據(jù)行,獲得一行數(shù)據(jù)后,ResultSet結(jié)果集可以使用getXxx方法獲得字段值(列值),將位置索引(第一列使用1,第二列使用2等等)或列名傳遞給getXxx方法的參數(shù)即可2021-10-2924 表7.1 ResultSet類的若干方法2021-10-2925 7.4.1 結(jié)果集與查詢結(jié)果集與查詢_32結(jié)果集的列名與列的數(shù)目結(jié)果集的列名與列的數(shù)目 程序查詢的時(shí)候。為了代碼更加容易維護(hù),希望知道數(shù)據(jù)庫(kù)表的字段(列)的名字以及表的字
22、段的個(gè)數(shù),那么一個(gè)辦法是使用返回到程序中的結(jié)果集來(lái)獲取相關(guān)的信息。假如結(jié)果集是rs(1) 得到元數(shù)據(jù)對(duì)象metaData ResultSetMetaData metaData = rs.getMetaData();(2)得到結(jié)果集的列的個(gè)數(shù),即共有幾列 int columnCount = metaData.getColumnCount();(3)結(jié)果集rs中的第i列的名字: String columnName = metaData.getColumnName(i);2021-10-2926 7.4.2 隨機(jī)查詢隨機(jī)查詢_1使用下述方法獲得一個(gè)Statement對(duì)象:Statement stmt
23、=con.createStatement(int type, int concurrency);type取值: ResultSet.TYPE_SCROLL_INSENSITIVE或 ResultSet.TYPE_SCROLL_SENSITIVEConcurrency取值: ResultSet.CONCUR_READ_ONLY或 ResultSet.CONCUR_UPDATABLE2021-10-2927 7.4.2 隨機(jī)查詢隨機(jī)查詢_2 根據(jù)參數(shù)的type、concurrency的取值情況,stmt返回相應(yīng)類型的結(jié)果集:ResultSet re=stmt.executeQuery(SQL語(yǔ)句語(yǔ)
24、句);滾動(dòng)查詢經(jīng)常用到ResultSet的下述方法:u public void first():將游標(biāo)移到結(jié)果集的第一行。u public void last():將游標(biāo)移到結(jié)果集的最后一行。u public int getRow():得到當(dāng)前游標(biāo)所指行的行號(hào),行號(hào)從1開(kāi)始,如果結(jié)果集沒(méi)有行,返回0u public boolean absolute(int row):將游標(biāo)移到參數(shù)row指定的行號(hào)。 2021-10-29 7.4.3 條件查詢條件查詢select from 表表 where 字段字段 滿足的條件滿足的條件例如: select * from product where price
25、 2000 and price5000select * from product where name = javaselect * from product where name like %里% 2021-10-2929 例子例子7_27_2 例子2使用MVC模式(有關(guān)知識(shí)見(jiàn)第6章)顯示warehouse數(shù)據(jù)庫(kù)product表中price字段值大于某個(gè)值的記錄。2021-10-2930 例子例子7_27_2中的中的web.xmlweb.xml 根據(jù)例子2中使用的servlet的名字及相關(guān)類,Web服務(wù)目錄ch7的WEB-INF下的web.xml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編
26、輯與保存見(jiàn)見(jiàn)5.1.2)。 queryByConditionServlet myservlet.control.Example7_2_Servlet queryByConditionServlet /queryByConditionServlet2021-10-2931 例子例子7_27_2中的模型中的模型 模型(Javabean)Javabean模型Example7_2_Bean.java負(fù)責(zé)存 儲(chǔ) 查 詢 到 的 記 錄 , 在 本 例 子 中Example7_2_Bean創(chuàng)建的Javabean模型的id是resultBean,scope取值是request。2021-10-2932 例子
27、例子7_27_2中的中的視圖(視圖(JSP頁(yè)面)頁(yè)面)視圖(視圖(JSP頁(yè)面)頁(yè)面) 視圖部分由2個(gè)JSP頁(yè)面構(gòu)成,其中example7_2.jsp頁(yè)面負(fù)責(zé)提供輸入數(shù)據(jù)的視圖,即用戶可以在該頁(yè)面輸入 查 詢 的 價(jià) 格 條 件 , 然 后 將 數(shù) 據(jù) 提 交 給 名 字 是q u e r y B y C o n d i t i o n S e r v l e t 的 s e r v l e t 。queryByConditionServlet負(fù)責(zé)查詢數(shù)據(jù)庫(kù),并將結(jié)果存儲(chǔ)到id為resultBean的Javabean數(shù)據(jù)模型中,然后請(qǐng)求視圖中的showRecord.jsp顯示數(shù)據(jù)模型result
28、Bean中的數(shù)據(jù)。example7_2.jsp和showRecord.jsp的效果如圖如圖7.19(a)和圖圖7.19(b)所示2021-10-2933 例子例子7_27_2中的控制器中的控制器控制器(控制器(servlet)E x a m p l e 7 _ 2 _ S e v l e t 負(fù) 責(zé) 創(chuàng) 建 名 字 是 queryByConditionServlet的servlet(見(jiàn)例子2前面web.xml文件的有關(guān)內(nèi)容)。 queryByConditionServlet查詢warehouse數(shù)據(jù)庫(kù)的product表中滿足價(jià)格條件的記錄,將結(jié)果存放到id是resultBean的Javabea
29、n數(shù)據(jù)模型中, 然后用轉(zhuǎn)發(fā)的方法請(qǐng)求showRecord.jsp顯示resultBean中的數(shù)據(jù)。2021-10-29347.5 更新、添加與刪除記錄更新、添加與刪除記錄1更新更新Statement對(duì)象調(diào)用方法:對(duì)象調(diào)用方法:public int executeUpdate(String sqlStatement);實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表中記錄的字段值的更新。例如,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表中記錄的字段值的更新。例如,executeUpdate(UPDATE product SET price = 6866 WHERE name=海爾電視機(jī)海爾電視機(jī));2添加Statement對(duì)象調(diào)用方法:public int
30、executeUpdate(String sqlStatement);實(shí)現(xiàn)向數(shù)據(jù)庫(kù)表中添加新的記錄。例如,executeUpdate(INSERT INTO students VALUES (012,神通手機(jī),2015-2-26,2687);3刪除Statement對(duì)象調(diào)用方法:public int executeUpdate(String sqlStatement);刪除數(shù)據(jù)庫(kù)表中的記錄。例如:executeUpdate(DELETE FROM product WHERE number = 888 );2021-10-2935 例子例子7_37_3 下面的例子3使用MVC模式(有關(guān)知識(shí)見(jiàn)第6
31、章)向warehouse數(shù)據(jù)庫(kù)product表中插入錄。2021-10-2936 例子例子7_37_3中的中的web.xmlweb.xml 根據(jù)例子3中使用的servlet的名字及相關(guān)類,Web服務(wù)目錄ch7的WEB-INF下的web.xml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編輯與保存見(jiàn)見(jiàn)5.1.2): insertServlet myservlet.control.Example7_3_Servlet insertServlet /insertServlet2021-10-2937 例子例子7_37_3中的模型中的模型 模型(Javabean) J a v a b e a n 模
32、型 例 子 2 中 的Example7_2_Bean.java完全相同,創(chuàng)建的Javabean模型的id是resultBean,scope取值是request。2021-10-2938 例子例子7_37_3中的中的視圖(視圖(JSP頁(yè)面)頁(yè)面)視圖(JSP頁(yè)面) 視 圖 部 分 由 2 個(gè) J S P 頁(yè) 面 構(gòu) 成 , 一 個(gè) 是example7_3.jsp,另一個(gè)是例子2中的showRecord.jsp,其中example7_3.jsp頁(yè)面負(fù)責(zé)提供輸入新記錄提交給名字是insertServlet的servlet。 insertServlet負(fù)責(zé)將記錄插入到數(shù)據(jù)庫(kù)的表中,然后查詢數(shù)據(jù)庫(kù)的表,
33、并將查詢結(jié)果存儲(chǔ)到id為resultBean的 J a v a b e a n 數(shù) 據(jù) 模 型 中 , 然 后 請(qǐng) 求 視 圖 中 的showRecor.jsp顯示數(shù)據(jù)模型resultBean中的數(shù)據(jù)。example7_3.jsp和showRecord.jsp的效果如圖如圖7.20(a)和圖圖7.20(b)所示。2021-10-2939 例子例子7_37_3中的控制器中的控制器控制器(控制器(servlet)Example7_3_Sevlet負(fù)責(zé)創(chuàng)建名字是insertServlet的servlet(見(jiàn)例子3前面web.xml文件的有關(guān)內(nèi)容)。insertServlet負(fù)責(zé)向數(shù)據(jù)庫(kù)warehou
34、se的product表插入記錄,并查詢product表中的全部記錄,將結(jié)果存放到id是resultBean的Javabean數(shù)據(jù)模型中,然后用轉(zhuǎn)發(fā)的方法請(qǐng)求showRecod.jsp顯示resultBean中的數(shù)據(jù)。為了避免出現(xiàn)中文亂碼,數(shù)據(jù)庫(kù)的連接方式采用:“jdbc:mysql:/地址地址/數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)?user=用戶用戶&password=密碼密碼 &characterEncoding=gb2312;2021-10-29407.6用結(jié)果集操作數(shù)據(jù)庫(kù)中的表用結(jié)果集操作數(shù)據(jù)庫(kù)中的表 盡管可以用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)中表進(jìn)行更新、插入操作,但也可以使用內(nèi)存中ResultSet結(jié)果集
35、對(duì)底層數(shù)據(jù)庫(kù)表進(jìn)行更新和插入操作(這些操作由系統(tǒng)自動(dòng)轉(zhuǎn)化為相應(yīng)的SQL語(yǔ)句),優(yōu)點(diǎn)是不必熟悉有關(guān)更新、插入的SQL語(yǔ)句,而且方便編寫(xiě)代碼,缺點(diǎn)是,必須要事先返回結(jié)果集。 7.6.1 更新記錄更新記錄2021-10-2941使用結(jié)果集更新數(shù)據(jù)庫(kù)表中第使用結(jié)果集更新數(shù)據(jù)庫(kù)表中第n行記錄中某列的值的步驟是:行記錄中某列的值的步驟是:1.結(jié)果集rs的游標(biāo)移動(dòng)到第n行 rs.absolute(n);2.結(jié)果集將第n行的某列的列值更新例如 更新列名是columnName的日期值是x指定的值: updateDate(String columnName, Date x) 3.更新數(shù)據(jù)庫(kù)中的表最后,結(jié)果集調(diào)用u
36、pdateRow()方法用結(jié)果集中的第n行更新數(shù)據(jù)庫(kù)表中的第n行記錄。 以下代碼片段更新product表中的第3行記錄的name列(字段)的值。rs.absolute(3);rs.updateString(name, IBM PC);rs.updateRow(); 7.6.2 插入記錄插入記錄2021-10-2942使用結(jié)果集向數(shù)據(jù)庫(kù)表中插入(添加)一行記錄步驟是使用結(jié)果集向數(shù)據(jù)庫(kù)表中插入(添加)一行記錄步驟是:1.結(jié)果集rs的游標(biāo)移動(dòng)到插入行 rs.moveToInsertRow();2.更新插入行的列值 例如:rs.updateString(1, c002);rs.updateString
37、(2, IBM iPad);rs.updateDate(3,Date();rs.updateDouble(4, 5356);3. 插入記錄最后,結(jié)果集調(diào)用insertRow()方法用結(jié)果集中的插入行向數(shù)據(jù)庫(kù)表中插入一行新記錄。2021-10-2943 例子例子7_47_4 下面的例子4使用MVC模式(有關(guān)知識(shí)見(jiàn)第6章)向warehouse數(shù)據(jù)庫(kù)product表中插入錄,但和前面的例子3不同的是,例子4不直接使用SQL語(yǔ)句,而是使用結(jié)果集操作數(shù)據(jù)庫(kù)中的表。2021-10-2944 例子例子7_47_4中的中的web.xmlweb.xml 根據(jù)例子4中使用的servlet的名字及相關(guān)類,Web服務(wù)
38、目錄ch7的WEB-INF下的web.xml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編輯與保存見(jiàn)見(jiàn)5.1.2): insertBySetServlet myservlet.control.Example7_4_Servlet insertBySetServlet /insertBySetServlet2021-10-2945 例子例子7_47_4中的模型中的模型 模型(Javabean) J a v a b e a n 模 型 與 例 子 2 中 的Example7_2_Bean.java完全相同,創(chuàng)建的Javabean模型的id是resultBean,scope取值是request。20
39、21-10-2946 例子例子7_47_4中的中的視圖(視圖(JSP頁(yè)面)頁(yè)面)視圖(視圖(JSP頁(yè)面)頁(yè)面) 視圖部分由2個(gè)JSP頁(yè)面構(gòu)成,一個(gè)是example7_4.jsp,另一個(gè)是例子2中的showRecord.jsp。 其中example7_4.jsp頁(yè)面負(fù)責(zé)提供輸入新記錄的視圖,即用戶可以在該頁(yè)面輸入要添加的記錄,然后將要添加的記錄提交給名字是insertBySetServlet的servlet。 insertBySetServlet負(fù)責(zé)將記錄插入到數(shù)據(jù)庫(kù)的表中,然后查詢數(shù)據(jù)庫(kù)的表,并將查詢結(jié)果存儲(chǔ)到id為resultBean的Javabean數(shù)據(jù)模型中,然后請(qǐng)求視圖中的showRe
40、cor.jsp顯示數(shù)據(jù)模型resultBean中的數(shù)據(jù)。example7_4.jsp和showRecord.jsp的效果如圖7.21(a)和圖7.21(b)所示。2021-10-2947 例子例子7_47_4中的控制器中的控制器控制器(控制器(servlet) Example7_4_Sevlet負(fù)責(zé)創(chuàng)建名字是insertBySetServlet的s e r v l e t ( 見(jiàn) 例 子 4 前 面 w e b . x m l 文 件 的 有 關(guān) 內(nèi) 容 ) 。insertBySetServlet使用結(jié)果集操作數(shù)據(jù)庫(kù),并向數(shù)據(jù)庫(kù)warehouse的product表插入記錄,然后查詢produc
41、t表中的全部記錄,將結(jié)果存放到id是resultBean的Javabean數(shù)據(jù)模型中,然后用轉(zhuǎn)發(fā)的方法請(qǐng)求showRecod.jsp顯示resultBean中的數(shù)據(jù). 為了避免出現(xiàn)中文亂碼,數(shù)據(jù)庫(kù)的連接方式采用:jdbc:mysql:/地址地址/數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)?user=用戶用戶&password=密碼密碼&characterEncoding=gb2312;2021-10-29487.7 預(yù)處理語(yǔ)句預(yù)處理語(yǔ)句 Java提供了更高效率的數(shù)據(jù)庫(kù)操作機(jī)制,就是PreparedStatement對(duì)象,該對(duì)象被習(xí)慣地稱作預(yù)處理語(yǔ)句對(duì)象。本節(jié)學(xué)習(xí)怎樣使用預(yù)處理語(yǔ)句對(duì)象操作數(shù)據(jù)庫(kù)中的表。 7.
42、7.1 預(yù)處理語(yǔ)句優(yōu)點(diǎn)預(yù)處理語(yǔ)句優(yōu)點(diǎn)2021-10-2949 Connection連接對(duì)象con調(diào)用prepareStatement(String sql)方法:PreparedStatement pre=con.prepareStatement(String sql);對(duì)參數(shù)sql指定的SQL語(yǔ)句進(jìn)行預(yù)編譯處理.那么pre調(diào)用下列方法都可以使得該底層內(nèi)部命令被 數(shù)據(jù)庫(kù)執(zhí)行: ResultSet executeQuery()boolean execute()int executeUpdate() 只要編譯好了PreparedStatement對(duì)象pre,那么pre可以隨時(shí)地執(zhí)行上述方法,提高了
43、訪問(wèn)數(shù)據(jù)庫(kù)的速度。2021-10-2950 例子例子7_57_5 在下面的例5使用預(yù)處理語(yǔ)句來(lái)查詢warehouse數(shù)據(jù)庫(kù)中product表的全部記錄(有關(guān)product表見(jiàn)7.1.2節(jié)),請(qǐng)讀者比較例子5和例子1的不同之處2021-10-2951 7.7.2 使用通配符使用通配符在對(duì)SQL進(jìn)行預(yù)處理時(shí)可以使用通配符“?”來(lái)代替字段的值。例如:prepareStatement pre=con.prepareStatement(SELECT * FROM product WHERE price ? );先調(diào)用相應(yīng)的方法設(shè)置通配符“?”代表的具體值,比如:pre.setDouble(1,6565)
44、;指定上述預(yù)處理語(yǔ)句pre中第1個(gè)通配符“?”代表的值是6565。 通配符按著它們?cè)陬A(yù)處理的“SQL語(yǔ)句”中從左至右依次出現(xiàn)的順序分別被稱做第1個(gè)、第2個(gè) 第m個(gè)通配符。預(yù)處理語(yǔ)句設(shè)置通配符“?”的值的常用方法有:void setDate(int parameterIndex,Date x)void setDouble(int parameterIndex,double x)void setFloat(int parameterIndex,float x)2021-10-2952 例子例子7_67_6 例子6使用MVC模式(有關(guān)知識(shí)見(jiàn)第6章)更新warehouse數(shù)據(jù)庫(kù)product表中的記錄
45、,但和前面的例子不同的是,這里使用了預(yù)處理語(yǔ)句。2021-10-2953 例子例子7_67_6中的中的web.xmlweb.xml 根據(jù)例子6中使用的servlet的名字及相關(guān)類,Web服務(wù)目錄ch7的WEB-INF下的web.xml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編輯與保存見(jiàn)5.1.2): preparedServlet myservlet.control.Example7_6_Servlet preparedServlet /preparedServlet2021-10-2954 例子例子7_67_6中的模型中的模型 模型(Javabean) Javabean模型與例子2中的E
46、xample7_2_Bean.java完全相同,創(chuàng)建的Javabean模型的id是resultBean,scope取值是request。2021-10-2955 例子例子7_67_6中的中的(JSP頁(yè)面)頁(yè)面)視圖(JSP頁(yè)面) 視圖部分由2個(gè)JSP頁(yè)面構(gòu)成,一個(gè)是example7_6.jsp,另一個(gè)是例子2中的showRecord.jsp(showRecod.jsp的代碼見(jiàn)例子2的視圖部分)。example7_6.jsp頁(yè)面將要更新的記錄,提交給名字是preparedServlet的servlet。preparedServlet負(fù)責(zé)更新數(shù)據(jù)庫(kù)表中的記錄,然后查詢數(shù)據(jù)庫(kù)的表,并將查詢結(jié)果存儲(chǔ)到
47、id為resultBean的Javabean數(shù)據(jù)模型中,然后請(qǐng)求視圖中的showRecor.jsp(見(jiàn)例子2中的視圖部分)顯示數(shù)據(jù)模型resultBean中的數(shù)據(jù)。example7_6.jsp和showRecord.jsp的效果如圖7.22(a)和圖7.22(b)所示2021-10-2956 例子例子7_67_6中的控中的控視圖視圖制器制器控制器(控制器(servlet) Example7_6_Servlet負(fù)責(zé)創(chuàng)建名字是insertServlet的servlet(見(jiàn)例子3前面web.xml文件的有關(guān)內(nèi)容)。insertServlet負(fù)責(zé)向數(shù)據(jù)庫(kù)warehouse的product表插入記錄,并
48、查詢product表中的全部記錄,將結(jié)果存放到id是resultBean的Javabean數(shù)據(jù)模型中,然后用轉(zhuǎn)發(fā)的方法請(qǐng)求showRecod.jsp顯示resultBean中的數(shù)據(jù)。為了避免出現(xiàn)中文亂碼,數(shù)據(jù)庫(kù)的連接方式采用:“jdbc:mysql:/地址地址/數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)?user=用戶用戶&password=密碼密碼 &characterEncoding=gb2312;2021-10-29577.8 事務(wù)事務(wù) 事務(wù)由一組SQL語(yǔ)句組成,所謂“事務(wù)處理”是指:應(yīng)用程序保證事務(wù)中的SQL語(yǔ)句要么全部都執(zhí)行,要么一個(gè)都不執(zhí)行。 事務(wù)處理步驟如下:1連接對(duì)象使用setAutoCom
49、mit(boolean autoCommit)方法將參數(shù)autoCommit取值為false來(lái)關(guān)閉自動(dòng)提交模式:con.setAutoCommit(false);2commit()方法 con調(diào)用commit()方法就是讓事務(wù)中的SQL語(yǔ)句全部生效。3rollback()方法 只要事務(wù)中任何一個(gè)SQL語(yǔ)句沒(méi)有生效,就拋出SQLException異常。在處理SQLException異常時(shí),必須讓con調(diào)用rollback()方法,其作用是撤消事務(wù)中成功執(zhí)行過(guò)的SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)所做的更新、插入或刪除操作.2021-10-2958 例子例子7_77_7 為了例子7的需要,我們?cè)赽ank數(shù)據(jù)庫(kù)中
50、創(chuàng)建了表user表,表的字段及屬性如下:name(文本文本) userMoney(雙精度型雙精度型) 例子7使用了事務(wù)處理,將user表中name字段是geng的userMoney的值減少50,并將減少的50增加到name字段是zhang的userMony屬性值上。運(yùn)行效果如圖如圖7.23.2021-10-29597.9 分頁(yè)顯示記錄分頁(yè)顯示記錄 可以使用二維數(shù)組table存放表的記錄,即用二維數(shù)組table中的行(一維數(shù)組tablei)存放一條記錄。假設(shè)table存放了m行記錄,準(zhǔn)備每頁(yè)顯示n行,那么,總頁(yè)數(shù)的計(jì)算公式:如果m除以n的余數(shù)大于0,總頁(yè)數(shù)等于m除以n的商加1;如果m除以n的余數(shù)
51、等于0,總頁(yè)數(shù)等于m除以n的商。 總頁(yè)數(shù)總頁(yè)數(shù)=(m%n)=0?(m/n):(m/n+1);=(m%n)=0?(m/n):(m/n+1); 如果準(zhǔn)備顯示第p頁(yè)的內(nèi)容,應(yīng)當(dāng)從tablel第 (p-1)*n行開(kāi)始,連續(xù)輸出行開(kāi)始,連續(xù)輸出n行行(最后一頁(yè)可能不足n行)。2021-10-2960 例子例子7_87_8 下面的例子8使用MVC模式(有關(guān)知識(shí)見(jiàn)第6章)分頁(yè)顯示warehouse數(shù)據(jù)庫(kù)product表中的記錄。2021-10-2961 例子例子7_87_8中的中的web.xmlweb.xml 根據(jù)例子8中使用的servlet的名字及相關(guān)類,Web服務(wù)目錄ch7的WEB-INF下的web.x
52、ml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編輯與保存見(jiàn)見(jiàn)5.1.2): queryAllServlet myservlet.control.Example7_8_Servlet queryAllServlet /queryAllServlet2021-10-2962 例子例子7_87_8中的模型中的模型 模型(Javabean) Javabean模型的id是pageBean(Example7_8_Bean創(chuàng)建),生命周期是session,用于存儲(chǔ)數(shù)據(jù)庫(kù)中的記錄。2021-10-2963 例子例子7_87_8中的中的視圖(視圖(JSP頁(yè)面)頁(yè)面)視圖(JSP頁(yè)面)視圖部分由2個(gè)JSP頁(yè)面構(gòu)
53、成,其中example7_8.jsp頁(yè)面負(fù)責(zé)提供輸入數(shù)據(jù)的視圖,即用戶可以在該頁(yè)面輸入數(shù)據(jù)庫(kù)的名、表名、密碼等信息,然后提交給名字是queryAllServlet的servlet。queryAllServlet負(fù)責(zé)查詢數(shù)據(jù)庫(kù),并將結(jié)果存儲(chǔ)到id為pageBean的 J a v a b e a n 數(shù) 據(jù) 模 型 中 , 然 后 請(qǐng) 求 視 圖 中 的example7_8_pageShow.jsp頁(yè)面負(fù)責(zé)分頁(yè)顯示pageBean的數(shù)據(jù)。example7_8.jsp和example7_8_pageShow.jsp的效果如圖7.24(a)和圖7.24(b)所示。2021-10-2964 例子例子7_
54、87_8中的控制器中的控制器控制器(控制器(servlet)Example7_8_Servlet負(fù)責(zé)創(chuàng)建名字是queryAllServlet的servlet(見(jiàn)例子8前面web.xml文件的有關(guān)內(nèi)容)。queryAllServlet查詢數(shù)據(jù)庫(kù)表中的全部記錄,將結(jié)果存放到id是pageBean的Javabean數(shù)據(jù)模型中,然后用轉(zhuǎn)發(fā)的方法請(qǐng)求example7_8_pageShow.jsp顯示pageBean中的數(shù)據(jù)。2021-10-29657.10 常見(jiàn)數(shù)據(jù)庫(kù)連接常見(jiàn)數(shù)據(jù)庫(kù)連接 7.10.1 .連接連接Microsoft SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)try Class.forName(com
55、.microsoft.sqlserver.jdbc.SQLServerDriver);catch(Exception e)try String uri= jdbc:sqlserver:/:1433;DatabaseName=warehouse; String user=sa; String password=dog123456; con=DriverManager.getConnection(uri,user,password); catch(SQLException e) System.out.println(e);2021-10-2966 7.10.2 連接Ora
56、cle數(shù)據(jù)庫(kù)Class.forName(oracle.jdbc.driver.OracleDriver).newInstance(); Class.forName(oracle.jdbc.driver.OracleDriver).newInstance(); Connection con=DriverManager.getConnection( jdbc:oracle:thin:主機(jī):端口號(hào):數(shù)據(jù)庫(kù)名,用戶名,密碼);例如:String user=scott;String password=tiger;con = DriverManager.getConnection (jdbc:oracle
57、:thin::1521:oracle9i,user,password);2021-10-2967 7.10.3 連接Microsoft Access數(shù)據(jù)庫(kù)Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con = DriverManager.getConnection(jdbc:odbc:數(shù)據(jù)源名字“, loginName, password )2021-10-2968 例子例子7_97_9例子9連接Access數(shù)據(jù)庫(kù)shop、查詢其中的goods表。2021-10-29697.11 標(biāo)準(zhǔn)化考試標(biāo)準(zhǔn)化考試 我
58、們很熟悉標(biāo)準(zhǔn)化考試,就是只需在給出的選擇中選出正確的答案。在本節(jié)的標(biāo)準(zhǔn)化考試中,用戶只能順序的回答每個(gè)隨機(jī)抽取到的題目,即回答一個(gè)題目,然后讀取下一個(gè)題目后,用戶就不能再回到上一個(gè)題目(類似新的駕駛員交通理論考試規(guī)則)。 7.11.1 設(shè)計(jì)要求設(shè)計(jì)要求2021-10-29701. 考生可以在輸入考號(hào)的頁(yè)面輸入考號(hào),單擊確認(rèn)提交鍵開(kāi)始考試。2 .考生單擊確認(rèn)提交鍵后,可以在答題頁(yè)面看到隨機(jī)抽取到的第1題。3考生回答一個(gè)題目后,可以繼續(xù)隨機(jī)抽取下一題目。4. 考生在答題頁(yè)面單擊交卷提交鍵,完成考試,系統(tǒng)將給出考生的分?jǐn)?shù)。 7.11.2 數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)2021-10-2971 創(chuàng)建一個(gè)名字為s
59、chool的數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)中使用test表存放試題。test表的各個(gè)字段及意義如下:number(int) number(int) :存放題號(hào),content(char) content(char) :存放試題內(nèi)容 ,a(char) a(char) :存放試題提供的a選擇 , ,b(char) b(char) :存放試題提供的b選擇,c(char) c(char) :存放試題提供的c選擇,d(char) d(char) :存放試題提供的d選擇,pic(char) pic(char) :存放試題示意圖的圖像文件的名字 ,answer(char) answer(char) :存放試題的答案使用s
60、tudent表存放考生的學(xué)號(hào)和分?jǐn)?shù)。student表的各個(gè)字段及意義如下:id(char) :存放考號(hào),score(float) :存放分?jǐn)?shù)。2021-10-2972 7.11.3 有關(guān)代碼有關(guān)代碼 例子10給出設(shè)計(jì)的有關(guān)代碼,使用MVC模式(有關(guān)知識(shí)見(jiàn)第6章)設(shè)計(jì)標(biāo)準(zhǔn)化考試。2021-10-2973 例子例子7_107_10中的中的web.xmlweb.xml 根據(jù)例子10中使用的servlet的名字及相關(guān)類,Web服務(wù)目錄ch7的WEB-INF下的web.xml文件需包含如下內(nèi)容(有關(guān)web.xml文件的編輯與保存見(jiàn)5.1.2): readTestServlet myservlet.control.Example7_10_Servlet readTestServlet /readT
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度大豆產(chǎn)業(yè)政策研究與咨詢合同3篇
- 2025年度個(gè)人借款合同利息計(jì)算規(guī)范模板4篇
- 2025年度高速公路養(yǎng)護(hù)出渣車輛勞務(wù)分包合同范本4篇
- 2025年度二零二五年度鋼構(gòu)結(jié)構(gòu)租賃合同模板
- 2025個(gè)人退股協(xié)議范本:私募基金投資退出與收益分配合同4篇
- 2025年度房屋買(mǎi)賣(mài)合同環(huán)保要求范本
- 2025年度鋼管租賃與綠色制造推廣合同
- 2025年度適用個(gè)人股權(quán)無(wú)償贈(zèng)與合同示范文本4篇
- 2025年場(chǎng)監(jiān)督管理局信息化項(xiàng)目進(jìn)度管理合同4篇
- 2025年度美團(tuán)外賣(mài)配送服務(wù)收費(fèi)標(biāo)準(zhǔn)合同范本3篇
- 墓地銷售計(jì)劃及方案設(shè)計(jì)書(shū)
- 從偏差行為到卓越一生3.0版
- 優(yōu)佳學(xué)案七年級(jí)上冊(cè)歷史
- 鋁箔行業(yè)海外分析
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學(xué)智慧樹(shù)知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學(xué)
- 城市道路智慧路燈項(xiàng)目 投標(biāo)方案(技術(shù)標(biāo))
- 【公司利潤(rùn)質(zhì)量研究國(guó)內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國(guó)地區(qū)碼
- 新疆2022年中考物理試卷及答案
評(píng)論
0/150
提交評(píng)論