




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學(xué)習與交流jsp分頁技術(shù)實現(xiàn).精品文檔.title: JSP分頁技術(shù)實現(xiàn)summary:使用工具類實現(xiàn)通用分頁處理author: evan_zhaoemail: evan_zhao目前比較廣泛使用的分頁方式是將查詢結(jié)果緩存在HttpSession或有狀態(tài)bean中,翻頁的時候從緩存中取出一頁數(shù)據(jù)顯示。這種方法有兩個主要的缺點:一是用戶可能看到的是過期數(shù)據(jù);二是如果數(shù)據(jù)量非常大時第一次查詢遍歷結(jié)果集會耗費很長時間,并且緩存的數(shù)據(jù)也會占用大量內(nèi)存,效率明顯下降。其它常見的方法還有每次翻頁都查詢一次數(shù)據(jù)庫,從ResultSet中
2、只取出一頁數(shù)據(jù)(使用rs.last();rs.getRow()獲得總計錄條數(shù),使用rs.absolute()定位到本頁起始記錄)。這種方式在某些數(shù)據(jù)庫(如oracle)的JDBC實現(xiàn)中差不多也是需要遍歷所有記錄,實驗證明在記錄數(shù)很大時速度非常慢。至于緩存結(jié)果集ResultSet的方法則完全是一種錯誤的做法。因為ResultSet在Statement或Connection關(guān)閉時也會被關(guān)閉,如果要使ResultSet有效勢必長時間占用數(shù)據(jù)庫連接。因此比較好的分頁做法應(yīng)該是每次翻頁的時候只從數(shù)據(jù)庫里檢索頁面大小的塊區(qū)的數(shù)據(jù)。這樣雖然每次翻頁都需要查詢數(shù)據(jù)庫,但查詢出的記錄數(shù)很少,網(wǎng)絡(luò)傳輸數(shù)據(jù)量不大,
3、如果使用連接池更可以略過最耗時的建立數(shù)據(jù)庫連接過程。而在數(shù)據(jù)庫端有各種成熟的優(yōu)化技術(shù)用于提高查詢速度,比在應(yīng)用服務(wù)器層做緩存有效多了。在oracle數(shù)據(jù)庫中查詢結(jié)果的行號使用偽列ROWNUM表示(從1開始)。例如select * from employee where rownum<10 返回前10條記錄。但因為rownum是在查詢之后排序之前賦值的,所以查詢employee按birthday排序的第100到120條記錄應(yīng)該這么寫: s
4、elect * from ( select my_table.*, rownum as my_rownum from ( select name, birth
5、day from employee order by birthday ) my_table where rownum <120 ) where my_rownum>=100mySQL可以使用LIMIT子句:select name,
6、 birthday from employee order by birthday LIMIT 99,20DB2有rownumber()函數(shù)用于獲取當前行數(shù)。SQL Server沒研究過,可以參考這篇文章:在Web程序中分頁會被頻繁使用,但分頁的實現(xiàn)細節(jié)卻是編程過程中比較麻煩的事情。大多分頁顯示的查詢操作都同時需要處理復(fù)雜的多重查詢條件,sql語句需要動態(tài)拼接組成,再加上分頁需要的記錄定位、總記錄條數(shù)查詢以及查詢結(jié)果的遍歷、封裝和顯示,程序會變得很復(fù)雜并且難以理解。因此需要一些工具類簡化分頁代碼,使程序員
7、專注于業(yè)務(wù)邏輯部分。下面是我設(shè)計的兩個工具類:PagedStatement 封裝了數(shù)據(jù)庫連接、總記錄數(shù)查詢、分頁查詢、結(jié)果數(shù)據(jù)封裝和關(guān)閉數(shù)據(jù)庫連接等操作,并使用了PreparedStatement支持動態(tài)設(shè)置參數(shù)。RowSetPage 參考PetStore的page by page iterator模式, 設(shè)計RowSetPage用于封裝查詢結(jié)果(使用OracleCachedRowSet緩存查詢出的一頁數(shù)據(jù),關(guān)于使用CachedRowSet封裝數(shù)據(jù)庫查詢結(jié)果請參考JSP頁面查詢顯示常用模式)以及當前頁碼、總記錄
8、條數(shù)、當前記錄數(shù)等信息, 并且可以生成簡單的HTML分頁代碼。PagedStatement 查詢的結(jié)果封裝成RowsetPage。下面是簡單的使用示例:1. /DAO查詢數(shù)據(jù)部分代碼: 2. public RowSetPage getEmployee(String gender, int pageNo) throws Exception 3.
9、0; String sql="select emp_id, emp_code, user_name, real_name from employee where gender =?" 4. /使用Oracle數(shù)據(jù)庫的分頁查詢實現(xiàn),每頁顯示5條 5. PagedSta
10、tement pst =new PagedStatementOracleImpl(sql, pageNo, 5); 6. pst.setString(1, gender); 7. return pst.executeQuery(); 8. /Servlet處理查詢請求部分代碼:
11、 9. int pageNo; 10. try 11. /可以通過參數(shù)pageno獲得用戶選擇的頁碼 12. pageNo = Integer.parseInt(request.getParameter("pageno") ); 13. &
12、#160; catch(Exception ex) 14. /默認為第一頁 15. pageNo=1; 16. String gender = request.getParameter("gender" ); 17. r
13、equest.setAttribute("empPage", myBean.getEmployee(gender, pageNo) ); 18. /JSP顯示部分代碼 19. <% page import = "page.RowSetPage"%> 20. <script language="javascript"> 21.
14、 function doQuery() 22. form1.actionType.value="doQuery" 23. form1.submit(); 24. &
15、#160;</script> 25. <form name=form1 method=get> 26. <input type=hidden name=actionType> 27. 性別: 28. <input type=text
16、name=gender size=1 value="<%=request.getParameter("gender")%>"> 29. <input type=button value=" 查詢 " onclick="doQuery()"> 30. RowSetPage empPage
17、160;= (RowSetPage)request.getAttribute("empPage"); 31. if (empPage = null ) empPage = RowSetPage.EMPTY_PAGE; 32. <table cellspacing="0" width="90%"> 33. &
18、#160; <tr> <td>ID</td> <td>代碼</td> <td>用戶名</td> <td>姓名</td> </tr> 34. javax.sql.RowSet empRS = (javax.sql.RowSet) empPage.getRowSe
19、t(); 35. if (empRS!=null) while (empRS.next() ) 36. <tr> 37. <td><%= empRS.getString("EMP_ID&
20、quot;)%></td> 38. <td><%= empRS.getString("EMP_CODE")%></td> 39. <td><%= empRS.get
21、String("USER_NAME")%></td> 40. <td><%= empRS.getString("REAL_NAME")%></td> 41. </tr> 42.
22、60; / end while 43. <tr> 44. /顯示總頁數(shù)和當前頁數(shù)(pageno)以及分頁代碼。 45. /此處doQuery為頁面上提交查詢動作的javascript函數(shù)名, pageno為標識當前頁碼的參數(shù)名 46.
23、 <td colspan=4><%= empPage .getHTML("doQuery", "pageno")%></td> 47. </tr> 48. </table> 49. </form> 效果如圖:因為分頁顯示一般都會伴有查
24、詢條件和查詢動作,頁面應(yīng)已經(jīng)有校驗查詢條件和提交查詢的javascript方法(如上面的doQuery),所以RowSetPage.getHTML()生成的分頁代碼在用戶選擇新頁碼時直接回調(diào)前面的處理提交查詢的javascript方法。注意在顯示查詢結(jié)果的時候上次的查詢條件也需要保持,如<input type=text name=gender size=1 value="<%=request.getParameter("gender")%>">。同時由于頁碼的參數(shù)名可以指定,因此也支持在同一
25、頁面中有多個分頁區(qū)。另一種分頁代碼實現(xiàn)是生成每一頁的URL,將查詢參數(shù)和頁碼作為QueryString附在URL后面。這種方法的缺陷是在查詢條件比較復(fù)雜時難以處理,并且需要指定處理查詢動作的servlet,可能不適合某些定制的查詢操作。如果對RowSetPage.getHTML()生成的默認分頁代碼不滿意可以編寫自己的分頁處理代碼,RowSetPage提供了很多getter方法用于獲取相關(guān)信息(如當前頁碼、總頁數(shù)、 總記錄數(shù)和當前記錄數(shù)等)。在實際應(yīng)用中可以將分頁查詢和顯示做成jsp taglib, 進一步簡化JSP代碼,屏蔽Java Code。附:分頁
26、工具類的源代碼, 有注釋,應(yīng)該很容易理解。1.Page.java2.RowSetPage.java(RowSetPage繼承Page)3.PagedStatement.java4.PagedStatementOracleImpl.java(PagedStatementOracleImpl繼承PagedStatement)您可以任意使用這些源代碼,但必須保留author evan_zhao字樣1. / Page.java 2. / author: evan_zhao 3. package page; 4. imp
27、ort java.util.List; 5. import java.util.ArrayList; 6. import java.util.Collection; 7. import java.util.Collections; 8. * Title: 分頁對象<br> 9. * Description: 用于包含數(shù)據(jù)及分頁信息的對象<br> 10. *
28、60; Page類實現(xiàn)了用于顯示分頁信息的基本方法,但未指定所含數(shù)據(jù)的類型, 11. * 可根據(jù)需要實現(xiàn)以特定方式組織數(shù)據(jù)的子類,<br> 12. *
29、; 如RowSetPage以RowSet封裝數(shù)據(jù),ListPage以List封裝數(shù)據(jù)<br> 13. * Copyright: Copyright (c) 2002 <br> 14. * author evan_zhao <br> 15. * version 1.0 16. public class Page implemen
30、ts java.io.Serializable 17. public static final Page EMPTY_PAGE = new Page(); 18. public static final int DEFAULT_PAGE_SIZE = 20; 19. public
31、static final int MAX_PAGE_SIZE = 9999; 20. private int myPageSize = DEFAULT_PAGE_SIZE; 21. private int start; 22. private int avaCount,totalSize; 23. &
32、#160; private Object data; 24. private int currentPageno; 25. private int totalPageCount; 26. * 默認構(gòu)造方法,只構(gòu)造空頁 27. protected Page() 28. &
33、#160; this.init(0,0,0,DEFAULT_PAGE_SIZE,new Object(); 29. * 分頁數(shù)據(jù)初始方法,由子類調(diào)用 30. * param start 本頁數(shù)據(jù)在數(shù)據(jù)庫中的起始位置 31. * param avaCount 本頁包含的數(shù)據(jù)條數(shù) 32
34、. * param totalSize 數(shù)據(jù)庫中總記錄條數(shù) 33. * param pageSize 本頁容量 34. * param data 本頁包含的數(shù)據(jù) 35. protected void init(int start, int
35、160;avaCount, int totalSize, int pageSize, Object data) 36. this.avaCount =avaCount; 37. this.myPageSize = pageSize; 38.
36、160; this.start = start; 39. this.totalSize = totalSize; 40. this.data=data; 41. /System.out.println("avaCount:"+avaCount
37、); 42. /System.out.println("totalSize:"+totalSize); 43. if (avaCount>totalSize) 44. /throw new Run
38、timeException("記錄條數(shù)大于總條數(shù)?!"); 45. this.currentPageno = (start -1)/pageSize +1; 46. this.totalPageCount = (totalSize + pageSize -1) / pageSi
39、ze; 47. if (totalSize=0 && avaCount=0) 48. this.currentPageno = 1; 49. this
40、.totalPageCount = 1; 50. /System.out.println("Start Index to Page No: " + start + "-" + currentPageno); 51. public Object getDa
41、ta() 52. return this.data; 53. * 取本頁數(shù)據(jù)容量(本頁能包含的記錄數(shù)) 54. * return 本頁能包含的記錄數(shù) 55. public int getPageSize() 56.
42、 return this.myPageSize; 57. * 是否有下一頁 58. * return 是否有下一頁 59. public boolean hasNextPage() 60. if (avaCount=0&
43、#160;&& totalSize=0) 61. return false; 62. return (start + avaCount -1) < totalSize; 63. retu
44、rn (this.getCurrentPageNo()<this.getTotalPageCount(); 64. * 是否有上一頁 65. * return 是否有上一頁 66. public boolean hasPreviousPage() 67. &
45、#160;return start > 1; 68. return (this.getCurrentPageNo()>1); 69. * 獲取當前頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 70. * return 71. public int getStart() 72.
46、60; return start; 73. * 獲取當前頁最后一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 74. * return 75. public int getEnd() 76. int end
47、;= this.getStart() + this.getSize() -1; 77. if (end<0) 78. end = 0; 79. return end;
48、 80. * 獲取上一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 81. * return 記錄對應(yīng)的rownum 82. public int getStartOfPreviousPage() 83. return Math.max(start-myPageSize,
49、0;1); 84. * 獲取下一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 85. * return 記錄對應(yīng)的rownum 86. public int getStartOfNextPage() 87. return start + avaCount; 8
50、8. * 獲取任一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置,每頁條數(shù)使用默認值 89. * param pageNo 頁號 90. * return 記錄對應(yīng)的rownum 91. public static int getStartOfAnyPage(int pageNo) 92.
51、 return getStartOfAnyPage(pageNo, DEFAULT_PAGE_SIZE); 93. * 獲取任一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 94. * param pageNo 頁號 95. * param pageSize&
52、#160;每頁包含的記錄數(shù) 96. * return 記錄對應(yīng)的rownum 97. public static int getStartOfAnyPage(int pageNo, int pageSize) 98. int startIndex = (pageNo-1) *
53、 pageSize + 1; 99. if ( startIndex < 1) startIndex = 1; 100. /System.out.println("Page No to Start Index: " +
54、160;pageNo + "-" + startIndex); 101. return startIndex; 102. * 取本頁包含的記錄數(shù) 103. * return 本頁包含的記錄數(shù) 104. public int
55、160;getSize() 105. return avaCount; 106. * 取數(shù)據(jù)庫中包含的總記錄數(shù) 107. * return 數(shù)據(jù)庫中包含的總記錄數(shù) 108. public int getTotalSize() 109.
56、160; return this.totalSize; 110. * 取當前頁碼 111. * return 當前頁碼 112. public int getCurrentPageNo() 113. ret
57、urn this.currentPageno; 114. * 取總頁碼 115. * return 總頁碼 116. public int getTotalPageCount() 117. return this.totalPageCount; 118.
58、 * param queryJSFunctionName 實現(xiàn)分頁的JS腳本名字,頁碼變動時會自動回調(diào)該方法 119. * param pageNoParamName 頁碼參數(shù)名稱 120. * return 121. public String getHTML(String
59、60;queryJSFunctionName, String pageNoParamName) 122. if (getTotalPageCount()<1) 123. return "<input type='hidden' name='"+
60、pageNoParamName+"' value='1' >" 124. if (queryJSFunctionName = null | queryJSFunctionName.trim().length()<1) 125.
61、60;queryJSFunctionName = "gotoPage" 126. if (pageNoParamName = null | pageNoParamName.trim().length()<1) 127. pageNoParamName =
62、 "pageno" 128. String gotoPage = "_"+queryJSFunctionName; 129. StringBuffer html = new StringBuffer("n"); 130.
63、; html.append("<script language="Javascript1.2">n") 131. .append("function ").append(gotoPage).append("(pageNo) n") 132.
64、; .append( " var curPage=1; n") 133. .append( " try curPage
65、= document.all"") 134. .append(pageNoParamName).append("".value; n") 135. .append( "
66、60; document.all"").append(pageNoParamName) 136. .append("".value = pageNo; n") 137.
67、160; .append( " ").append(queryJSFunctionName).append("(pageNo); n") 138. .append( "
68、0; return true; n") 139. .append( " catch(e) n") 140. /
69、160;.append( " try n") 141. / .append( " document.forms0.submit(); n&q
70、uot;) 142. / .append( " catch(e) n") 143. .append( "
71、0; alert('尚未定義查詢方法:function ") 144. .append(queryJSFunctionName).append("()'); n") 145.
72、 .append( " document.all"").append(pageNoParamName) 146. .append("".value = curPage;
73、0; n") 147. .append( " return false; n") 148. /
74、60; .append( " n") 149. .append( " n") 150. &
75、#160; .append( "") 151. .append( "</script> n") 152. .append( &
76、#160;""); 153. html.append( "<table border=0 cellspacing=0 cellpadding=0 align=center width=80%> n") 154. &
77、#160;.append( " <tr> n") 155. .append( " <td align=left><br> n"); 156.
78、 html.append( " 共" ).append( getTotalPageCount() ).append( "頁") 157. .append( "
79、 ") .append(getStart().append(".").append(getEnd() 158. .append("/").append(this.getTotalSize().append(" n") 159.
80、0; .append( " </td> n") 160. .append( " <td align=right> n"); 161.
81、; if (hasPreviousPage() 162. html.append( "<a href='javascript:").append(gotoPage) 163. &
82、#160; .append("(") .append(getCurrentPageNo()-1) 164. .append( ")'>上一頁</a> n"); 165. html.append(
83、 " 第") 166. .append( " <select name='") 167.
84、; .append(pageNoParamName).append("' onChange='javascript:") 168. .append(gotoPage).append("(this.value)'>n"); 169. &
85、#160; String selected = "selected" 170. for(int i=1;i<=getTotalPageCount();i+) 171. if( i = getCurrentPageNo()
86、;) 172. selected = "selected" 173. else selected = "" 174.
87、0; html.append( " <option value='").append(i).append("' ") 175. .append(selected).append
88、(">").append(i).append("</option> n"); 176. if (getCurrentPageNo()>getTotalPageCount() 177. html.append( "
89、0; <option value='").append(getCurrentPageNo() 178. .append("' selected>").append(getCurrentPageNo() 179.
90、 .append("</option> n"); 180. html.append( " </select>頁 n"); 181. if (hasNextPage() 182.
91、; html.append( " <a href='javascript:").append(gotoPage) 183. .append("(").append(getCurrentPageN
92、o()+1) 184. .append( ")'>下一頁</a> n"); 185. html.append( "</td></tr></table>
93、160;n"); 186. return html.toString(); 187. / RowSetPage.java 188. / author: evan_zhao 189. package page; 190. import javax.sql.RowSet; 191. * <p>Title: RowSetPage</p> 192.
94、;* <p>Description: 使用RowSet封裝數(shù)據(jù)的分頁對象</p> 193. * <p>Copyright: Copyright (c) 2003</p> 194. * author evan_zhao 195. * version 1.0 196. public class RowSetPage extends Page 197. &
95、#160; private javax.sql.RowSet rs; 198. *空頁 199. public static final RowSetPage EMPTY_PAGE = new RowSetPage(); 200. *默認構(gòu)造方法,創(chuàng)建空頁 201. pu
96、blic RowSetPage() 202. this(null, 0,0); 203. *構(gòu)造分頁對象 204. *param crs 包含一頁數(shù)據(jù)的OracleCachedRowSet 205. *param start 該頁數(shù)據(jù)在數(shù)據(jù)庫中的起始位置 206.
97、; *param totalSize 數(shù)據(jù)庫中包含的記錄總數(shù) 207. public RowSetPage(RowSet crs, int start, int totalSize) 208. this(crs,start,totalSize,Page.DEFAULT_PAGE_SIZE); 209. &
98、#160; *構(gòu)造分頁對象 210. *param crs 包含一頁數(shù)據(jù)的OracleCachedRowSet 211. *param start 該頁數(shù)據(jù)在數(shù)據(jù)庫中的起始位置 212. *param totalSize 數(shù)據(jù)庫中包含的記錄總數(shù) 213. *pageSize
99、160;本頁能容納的記錄數(shù) 214. public RowSetPage(RowSet crs, int start, int totalSize, int pageSize) 215. try 216. int
100、0;avaCount=0; 217. if (crs!=null) 218. crs.beforeFirst(); 219.
101、0; if (crs.next() 220. crs.last(); 221.
102、0; avaCount = crs.getRow(); 222. crs.beforeFirst(); 223. rs = crs; 224.
103、; super.init(start,avaCount,totalSize,pageSize,rs); 225. catch(java.sql.SQLException sqle) 226. throw new RuntimeExcep
104、tion(sqle.toString(); 227. *取分頁對象中的記錄數(shù)據(jù) 228. public javax.sql.RowSet getRowSet() 229. return rs; 230. / PagedStatement.java 231. / author: evan_zhao 232. pa
105、ckage page; 233. import foo.DBUtil; 234. import java.math.BigDecimal; 235. import java.util.List; 236. import java.util.Iterator; 237. import java.util.Collections; 238. import java.sql.Connection; 239. import java.sql.SQLException; 240. import java.sql.R
106、esultSet; 241. import java.sql.Statement; 242. import java.sql.PreparedStatement; 243. import java.sql.Timestamp; 244. import javax.sql.RowSet; 245. * <p>Title: 分頁查詢</p> 246. * <p>Description: 根據(jù)查詢語句和頁碼查詢出當頁數(shù)據(jù)</p> 247.
107、;* <p>Copyright: Copyright (c) 2002</p> 248. * author evan_zhao 249. * version 1.0 250. public abstract class PagedStatement 251. public final static int MAX_PAGE_SIZE
108、0;= Page.MAX_PAGE_SIZE; 252. protected String countSQL, querySQL; 253. protected int pageNo,pageSize,startIndex,totalCount; 254. protected javax.sql.RowSet rowSet; 255. &
109、#160;protected RowSetPage rowSetPage; 256. private List boundParams; 257. * 構(gòu)造一查詢出所有數(shù)據(jù)的PageStatement 258. * param sql query sql 259. public
110、160;PagedStatement(String sql) 260. this(sql,1,MAX_PAGE_SIZE); 261. * 構(gòu)造一查詢出當頁數(shù)據(jù)的PageStatement 262. * param sql query sql 263.
111、;* param pageNo 頁碼 264. public PagedStatement(String sql, int pageNo) 265. this(sql, pageNo, Page.DEFAULT_PAGE_SIZE); 266. * 構(gòu)造一查詢出當頁數(shù)據(jù)的PageSt
112、atement,并指定每頁顯示記錄條數(shù) 267. * param sql query sql 268. * param pageNo 頁碼 269. * param pageSize 每頁容量 270. public PagedStatement(String&
113、#160;sql, int pageNo, int pageSize) 271. this.pageNo = pageNo; 272. this.pageSize = pageSize; 273. this.startIndex
114、160;= Page.getStartOfAnyPage(pageNo, pageSize); 274. this.boundParams = Collections.synchronizedList(new java.util.LinkedList(); 275. this.countSQL = "select c
115、ount(*) from ( " + sql +") " 276. this.querySQL = intiQuerySQL(sql, this.startIndex, pageSize); 277. *生成查詢一頁數(shù)據(jù)的sql語句 278.
116、*param sql 原查詢語句 279. *startIndex 開始記錄位置 280. *size 需要獲取的記錄數(shù) 281. protected abstract String intiQuerySQL(String sql, int startIndex, int size); 282.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB63∕T 1865-2020 川西云杉播種育苗及造林技術(shù)規(guī)程
- 壁紙銷售計劃書
- 江蘇省連云港市2024-2025學(xué)年七年級下學(xué)期6月期末考試生物試卷(含詳解)
- 小學(xué)生超市活動策劃方案
- 小班春季親子活動方案
- 小小企業(yè)家研學(xué)活動方案
- 希臘移民活動方案
- 帽子派對活動方案
- 工程公司招聘策劃方案
- 居家體驗活動方案
- 學(xué)生人力資源(董克用)復(fù)習題匯總
- 水產(chǎn)品加工項目實施方案
- IEEE33節(jié)點配電系統(tǒng)
- 兒科質(zhì)控中心建設(shè)方案
- 鍍鋅鋼管壁厚及重量
- 區(qū)塊鏈金融學(xué)習通超星課后章節(jié)答案期末考試題庫2023年
- 新疆烏魯木齊市天山區(qū)2022-2023學(xué)年小升初總復(fù)習數(shù)學(xué)精選精練含答案
- 2023年宜賓市敘州區(qū)區(qū)內(nèi)外考試選調(diào)在編在職教師考試題庫
- 八年級道德與法治下冊第一單元堅持憲法至上思維導(dǎo)圖人教部編版
- 七年級數(shù)學(xué)下冊期末考試卷附帶答案(京改版)
- 亮劍精神與團隊管理濃縮版課件
評論
0/150
提交評論