




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、【精品文檔】如有侵權,請聯(lián)系網站刪除,僅供學習與交流jsp分頁技術實現(xiàn).精品文檔.title: JSP分頁技術實現(xiàn)summary:使用工具類實現(xiàn)通用分頁處理author: evan_zhaoemail: evan_zhao目前比較廣泛使用的分頁方式是將查詢結果緩存在HttpSession或有狀態(tài)bean中,翻頁的時候從緩存中取出一頁數(shù)據(jù)顯示。這種方法有兩個主要的缺點:一是用戶可能看到的是過期數(shù)據(jù);二是如果數(shù)據(jù)量非常大時第一次查詢遍歷結果集會耗費很長時間,并且緩存的數(shù)據(jù)也會占用大量內存,效率明顯下降。其它常見的方法還有每次翻頁都查詢一次數(shù)據(jù)庫,從ResultSet中
2、只取出一頁數(shù)據(jù)(使用rs.last();rs.getRow()獲得總計錄條數(shù),使用rs.absolute()定位到本頁起始記錄)。這種方式在某些數(shù)據(jù)庫(如oracle)的JDBC實現(xiàn)中差不多也是需要遍歷所有記錄,實驗證明在記錄數(shù)很大時速度非常慢。至于緩存結果集ResultSet的方法則完全是一種錯誤的做法。因為ResultSet在Statement或Connection關閉時也會被關閉,如果要使ResultSet有效勢必長時間占用數(shù)據(jù)庫連接。因此比較好的分頁做法應該是每次翻頁的時候只從數(shù)據(jù)庫里檢索頁面大小的塊區(qū)的數(shù)據(jù)。這樣雖然每次翻頁都需要查詢數(shù)據(jù)庫,但查詢出的記錄數(shù)很少,網絡傳輸數(shù)據(jù)量不大,
3、如果使用連接池更可以略過最耗時的建立數(shù)據(jù)庫連接過程。而在數(shù)據(jù)庫端有各種成熟的優(yōu)化技術用于提高查詢速度,比在應用服務器層做緩存有效多了。在oracle數(shù)據(jù)庫中查詢結果的行號使用偽列ROWNUM表示(從1開始)。例如select * from employee where rownum<10 返回前10條記錄。但因為rownum是在查詢之后排序之前賦值的,所以查詢employee按birthday排序的第100到120條記錄應該這么寫: 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é)卻是編程過程中比較麻煩的事情。大多分頁顯示的查詢操作都同時需要處理復雜的多重查詢條件,sql語句需要動態(tài)拼接組成,再加上分頁需要的記錄定位、總記錄條數(shù)查詢以及查詢結果的遍歷、封裝和顯示,程序會變得很復雜并且難以理解。因此需要一些工具類簡化分頁代碼,使程序員
7、專注于業(yè)務邏輯部分。下面是我設計的兩個工具類:PagedStatement 封裝了數(shù)據(jù)庫連接、總記錄數(shù)查詢、分頁查詢、結果數(shù)據(jù)封裝和關閉數(shù)據(jù)庫連接等操作,并使用了PreparedStatement支持動態(tài)設置參數(shù)。RowSetPage 參考PetStore的page by page iterator模式, 設計RowSetPage用于封裝查詢結果(使用OracleCachedRowSet緩存查詢出的一頁數(shù)據(jù),關于使用CachedRowSet封裝數(shù)據(jù)庫查詢結果請參考JSP頁面查詢顯示常用模式)以及當前頁碼、總記錄
8、條數(shù)、當前記錄數(shù)等信息, 并且可以生成簡單的HTML分頁代碼。PagedStatement 查詢的結果封裝成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、詢條件和查詢動作,頁面應已經有校驗查詢條件和提交查詢的javascript方法(如上面的doQuery),所以RowSetPage.getHTML()生成的分頁代碼在用戶選擇新頁碼時直接回調前面的處理提交查詢的javascript方法。注意在顯示查詢結果的時候上次的查詢條件也需要保持,如<input type=text name=gender size=1 value="<%=request.getParameter("gender")%>">。同時由于頁碼的參數(shù)名可以指定,因此也支持在同一
25、頁面中有多個分頁區(qū)。另一種分頁代碼實現(xiàn)是生成每一頁的URL,將查詢參數(shù)和頁碼作為QueryString附在URL后面。這種方法的缺陷是在查詢條件比較復雜時難以處理,并且需要指定處理查詢動作的servlet,可能不適合某些定制的查詢操作。如果對RowSetPage.getHTML()生成的默認分頁代碼不滿意可以編寫自己的分頁處理代碼,RowSetPage提供了很多getter方法用于獲取相關信息(如當前頁碼、總頁數(shù)、 總記錄數(shù)和當前記錄數(shù)等)。在實際應用中可以將分頁查詢和顯示做成jsp taglib, 進一步簡化JSP代碼,屏蔽Java Code。附:分頁
26、工具類的源代碼, 有注釋,應該很容易理解。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. * 默認構造方法,只構造空頁 27. protected Page() 28. &
33、#160; this.init(0,0,0,DEFAULT_PAGE_SIZE,new Object(); 29. * 分頁數(shù)據(jù)初始方法,由子類調用 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 記錄對應的rownum 82. public int getStartOfPreviousPage() 83. return Math.max(start-myPageSize,
49、0;1); 84. * 獲取下一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 85. * return 記錄對應的rownum 86. public int getStartOfNextPage() 87. return start + avaCount; 8
50、8. * 獲取任一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置,每頁條數(shù)使用默認值 89. * param pageNo 頁號 90. * return 記錄對應的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 記錄對應的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腳本名字,頁碼變動時會自動回調該方法 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. *默認構造方法,創(chuàng)建空頁 201. pu
96、blic RowSetPage() 202. this(null, 0,0); 203. *構造分頁對象 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; *構造分頁對象 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. * 構造一查詢出所有數(shù)據(jù)的PageStatement 258. * param sql query sql 259. public
110、160;PagedStatement(String sql) 260. this(sql,1,MAX_PAGE_SIZE); 261. * 構造一查詢出當頁數(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. * 構造一查詢出當頁數(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 韓語五級試題及答案
- 物業(yè)案場培訓
- 木牘教育數(shù)學課程體系
- 血透室肌肉痙攣護理查房
- 腦血管病變病人的護理
- 2025年中國母乳喂養(yǎng)乳頭罩行業(yè)市場全景分析及前景機遇研判報告
- 會計總賬業(yè)務流程規(guī)范
- 餐飲企業(yè)租賃及品牌輸出服務合同
- 航空公司新員工入職培訓
- 車輛無償租賃與品牌形象展示協(xié)議
- 2024-2030年中國激光水平儀行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 疑難病例討論課件
- 部編本小學語文六年級下冊畢業(yè)總復習教案
- JB∕T 11864-2014 長期堵轉力矩電動機式電纜卷筒
- 小兒氨酚黃那敏顆粒的藥動學研究
- 生態(tài)環(huán)境行政處罰自由裁量基準
- 長沙市開福區(qū)2024屆六年級下學期小升初數(shù)學試卷含解析
- 2024年安徽普通高中學業(yè)水平選擇性考試化學試題及答案
- DZ/T 0462.3-2023 礦產資源“三率”指標要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- 2024年昆明巫家壩建設發(fā)展有限責任公司招聘筆試沖刺題(帶答案解析)
- 《取水許可核驗報告編制導則(試行)(征求意見稿)》
評論
0/150
提交評論