




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JavaWeb應用開發技術新聞發布系統訪問數據庫主講:
目錄CONTENTS01應用JDBC實現新聞信息添加
02應用數據庫連接池實現新聞信息修改素質目標技能目標知識目標掌握JDBC的概念掌握JDBC的工作原理掌握數據庫訪問步驟掌握JDBC常用類和接口掌握數據連接池的配置與應用具備應用JDBC技術實現數據庫連接的能力具備應用JDBC技術實現數據持久化存儲的能力具備應用JDBC技術實現數據增、刪、改、查的能力具備應用連接池技術實現數據庫連接的能力學習目標培養AI素養培養開發應用程序的興趣具備嚴謹、細致的工作態度具備較強的社會責任感具備自主學習的能力增強數據安全意識任務背景在新聞發布系統項目的開發過程中,數據庫是核心組成部分,負責存儲新聞信息、用戶數據、評論信息等。在本工作單元中,項目團隊將采用Java數據庫互連(JavaDatabaseConnectivity,JDBC)技術來連接MySQL數據庫,實現項目數據的持久化存儲以及數據的查詢、更新、插入和刪除等操作。感謝聆聽任務三:新聞發布系統訪問數據庫JavaWeb應用開發技術01應用JDBC實現新聞信息添加任務描述本任務先介紹JDBC工作原理、JDBC常用類和應用程序接口(ApplicationProgramInterface,API)及其功能,然后應用JDBC技術連接MySQL數據庫,實現將新聞信息保存到數據庫表的操作。JDBC(JavaDataBaseConnectivity)是Java數據庫連接技術的簡稱。JDBC是Java數據庫連接規范,由一組使用Java語言編寫的類和接口組成,稱為JDBCAPI,位于java.sql以及javax.sql包中。JDBCAPI為Java開發人員操作數據庫提供了一個標準,可以為多種關系數據庫提供統一訪問。JDBC概念項目開發中,使用JDBC可以實現應用程序與數據庫之間的數據通信,簡單來說,JDBC的作用有以下3點。1.建立應用程序與數據庫之間的訪問連接2.將編寫好的SQL語句發送到數據庫執行(增、刪、改、查)3.對數據庫返回的結果進行處理JDBC的作用JDBC工作原理JDBC定義了一組標準接口,使得開發者可以使用相同的代碼結構來連接和操作不同的數據庫,而不需要關心底層數據庫的具體實現。JDBC通過驅動程序與數據庫進行通信。不同的數據庫廠商提供了不同的JDBC驅動程序,這些驅動程序實現了JDBCAPI,并與特定數據庫的底層通信協議相對應。JDBC使用DriverManager類來管理數據庫連接。開發者可以通過提供數據庫的URL、用戶名和密碼來獲取數據庫連接。獲取連接后,就可以通過JDBC的JavaAPI進行SQL語句執行數據的增、刪、改、查等操作。JDBC的工作原理Java應用程序SqlServerOracleJDBCDriverManagerSqlServerJDBC
驅動程序JDBCAPI
MySQLOracleJDBC
驅動程序MySQLJDBC
驅動程序不同數據庫廠商有不同的JDBC驅動,不同的JDBC驅動實現與不同數據庫的連接;不同數據庫廠商的JDBC驅動均有JDBCAPI中的DriverManager類來統一管理。小結JDBC是Java數據庫連接規范,各個數據庫廠商在遵循JDBC規范的基礎上提供訪問自己公司數據庫服務器的驅動才能保證應用程序與數據庫之間數據通信,所以遵循一定的規范和標準非常重要!在數據庫訪問中,保障數據的安全性非常重要!遵守職業規范與標準增強信息安全意識!交流與討論通過交流討論對問題進行深入的探索:回憶課程的要點,思考一下幾個問題:JDBC是什么?主要作用是什么?JDBC的工作原理是什么?開始加載并注冊驅動程序創建一個Connection對象創建一個Statement對象執行語句關閉ResultSet對象關閉Statement對象關閉連接結束使用ResultSet對象12345876添加JDBC驅動jar包1個準備天龍八步JDBC程序訪問數據庫的步驟Class.forName(JDBC驅動類);//
mySQL數據庫驅動類:com.mysql.jdbc.Driver//sqlserver數據庫驅動類:"com.microsoft.sqlserver.jdbc.SQLServerDriver"
第一步:加載并注冊驅動程序Connectioncon=DriverManager.getConnection(JDBCURL,數據庫用戶名,密碼);JDBCURL連接字符串是固定格式:jdbc:<子協議>:<子名稱>以下為mySQL的JDBCURL示例:jdbc:mysql://localhost:3306/news第二步:創建與數據庫連接Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");第三、四步:創建一個Statement對象并執行SQL語句使用Connection對象創建Statement對象,并執行SQL語句以返回一個ResultSet對象,它包含執行查詢后所產生的結果集“localhost”代表本機;其它機器用機器名稱或IP地址數據庫名稱發送并執行SQL語句的步驟:數據庫端口號JDBCURL用來標識數據庫JDBC程序訪問數據庫的步驟—連接數據庫JDBC程序訪問數據庫的步驟while(rs.next()){intx=rs.getInt("a");Strings=rs.getString("b");floatf=rs.getFloat("c");}第五步:處理結果rs.close();stmt.close();con.close();第六、七、八步:關閉結果集、查詢語句及與數據庫的連接,釋放數據庫資源注意關閉的順序先ResultSet再Statement最后為Connection使用ResultSet對象的next()方法循環遍歷結果集釋放數據庫資源的步驟:方法getXXX提供了獲取當前行中某列值的途徑JDBC程序訪問數據庫的步驟---處理數據集JDBCAPI作用:供程序員調用的接口與類,集成在java.sql和javax.sql包中,核心類與接口:DriverManager類Connection接口Statement接口ResultSet接口ResultSetMetaData接口PreparedStatement接口CallableStatement接口JDBC常用類和接口Java應用程序數據庫JDBCAPI
DriverManager作用:載入各種不同的JDBC驅動,獲取Connection對象,與數據庫連接Connection作用:與數據庫通信,Connection最為重要的一個方法就是用來獲取Statement對象;Statement作用:用來向數據庫發送SQL語句ResultSet作用:獲取查詢結果集ResultSetMetaData接口:存放結果集元數據信息,有關從數據庫查詢返回的結果集對象和與數據庫相關的額外信息,由ResultSetMetaData對象提供PreparedStatement接口:擴展了Statement接口,提供方法使SQL語句提前編譯好,提高執行效率。CallableStatement接口:為所有的數據庫管理系統提供了一種以標準形式調用存儲過程的方法。JDBC常用類和接口DriverManager類常用方法:(1)DriverManager.registerDriver(newDriver())registerDriver()方法用于注冊驅動,但是在實際開發中并不推薦采用registerDriver()方法注冊驅動。在實際開發中推薦使用Class.forName("驅動包名.類名")加載驅動。MySQL5.x加載驅動類的代碼:Class.forName("com.mysql.jdbc.Driver")。MySQL8加載驅動類的代碼:Class.forName("com.mysql.cj.jdbc.Driver")。Oracle數據庫加載驅動類的代碼:Class.forName("oracle.jdbc.driver.OracleDriver")。JDBC常用類和接口(2)DriverManager.getConnection(StringURL,Stringuser,Stringpassword)getConnection()方法用來與數據庫建立連接。方法的第一個參數用于標識一個被注冊的驅動程序。JDBCURL的標準由以下3部分組成,各部分間用冒號分隔。<協議>:<子協議>:<子名稱>協議:JDBCURL中的協議總是jdbc。子協議:用于標識數據庫驅動程序子名稱:標識數據庫的方法。例如:對于MySQL數據庫連接,JDBCURL采用如下形式(sid表示數據庫名稱)。jdbc:mysql://localhost:3306/sidJDBC常用類和接口Connection接口常用方法(1)createStatement():創建向數據庫發送SQL語句的Statement對象。(2)prepareStatement(sql):創建向數據庫發送預編譯SQL語句的PrepareSatement對象。(3)prepareCall(sql):創建執行存儲過程的CallableStatement對象。(4)setAutoCommit(BooleanautoCommit):設置是否自動提交事務。(5)commit():提交對數據庫的改動并釋放當前連接持有的數據庫的鎖。(6)rollback():回滾當前事務中的所有改動并釋放當前連接持有的數據庫的鎖。JDBC常用類和接口例3-1使用JDBCAPI連接MySQL數據庫案例技能點:JDBC工作原理,數據庫訪問步驟,DriverManager類、Connection接口的應用。實現步驟如下。①在MySQL數據庫中做好準備,執行SQL命令createdatabasenews,新建新聞數據庫news。②打開IntelliJIDEA,創建一個新的JavaWeb項目,項目命名為newspro,在項目的src/main/java目錄下新建包和類:cn.sdcet.utils.BaseDao。③在IDEA中單擊項目架構ProjectStructure,選擇庫文件Libraries,單擊按鈕,將MySQL的驅動JAR包添加到項目依賴庫中。④在BaseDao類中編寫連接數據庫news的代碼。⑤編寫main()方法,運行Java應用程序,測試連接效果例3-1使用JDBCAPI連接MySQL數據庫packagecn.sdcet.util;importjava.sql.*;publicclassBaseDao{privatestaticfinalStringDRIVER="com.mysql.jdbc.Driver";privatestaticfinalStringURL="jdbc:mysql://localhost:3306/news?characterEncoding=UTF-8";//連接字符串privatestaticfinalStringUNAME="root";//MySQL用戶名privatestaticfinalStringUPWD="123456";//密碼protectedConnectioncon;protectedConnectiongetConnection()throwsException{//連接數據庫//加載并注冊驅動程序Class.forName(DRIVER);//創建數據庫連接對象con=DriverManager.getConnection(URL,UNAME,UPWD);returncon;}//釋放對象protectedvoidcloseAll(){try{if(con!=null){con.close();}}catch(SQLExceptione){e.printStackTrace();}}
publicstaticvoidmain(String[]args)throwsException{Connectioncon=newBaseDao().getConnection();if(con!=null){System.out.println("連接數據庫成功!");}}}JDBC常用類和接口文件運行結果如圖所示,控制臺中輸出了“連接數據庫成功!”,說明成功連接上了MySQL數據庫。Statement接口的常用方法:(1)executeQuery(Stringsql):用于向數據庫發送查詢語句,返回代表查詢結果的ResultSet對象。(2)executeUpdate(Stringsql):用于向數據庫發送INSERT、UPDATE或DELETE語句,返回一個整數(用于表示操作導致數據庫幾行數據發生了變化)。(3)execute(Stringsql):用于向數據庫發送任意SQL語句。(4)addBatch(Stringsql):把多條SQL語句放到一個批處理中。(5)executeBatch():發送一批SQL語句到數據庫并執行。JDBC常用類和接口ResultSet接口的常用方法:(1)獲取任意類型的數據的方法。getObject(intindex):通過下標獲取任意類型的數據。getObject(stringcolumnName):通過列名獲取任意類型的數據。(2)獲取指定類型的數據的方法。getString(intindex)、getString(StringcolumnName):獲取String類型的數據。getInt(intindex)、getInt(StringcolumnName):獲取Int類型的數據。(3)遍歷查詢結果集的方法。next():獲取下一行數據。JDBC常用類和接口JDBC常用類和接口遍歷查詢結果集的過程如圖所示。ResultSetMetaData接口常用方法如下:intgetColumnCount():返回ResultSet對象中的列數。JDBC常用類和接口PreparedStatement接口:(1)創建PreparedStatement對象以下代碼段(其中con是Connection對象)用于創建包含帶兩個IN參數占位符的SQL語句的PreparedStatement對象。PreparedStatementpstmt=con.prepareStatement("UPDATEtable4SETm=?WHEREx=?");pstmt對象包含語句UPDATEtable4SETm=?WHEREx=?,該語句已被發送給數據庫管理系統,并為執行做好了準備。(2)使用PreparedStatement對象如果發送的SQL語句中有輸入參數,則在執行PreparedStatement對象之前必須設置每個?的值。這可通過調用setXXX()方法來完成。例如,以下代碼將第一個參數設為123456789,第二個參數設為100000000。pstmt.setLong(1,123456789);pstmt.setLong(2,100000000);JDBC常用類和接口JDBC常用類和接口PreparedStatement接口與Statement接口的比較如表所示比較點PreparedStatementStatement關系子接口,繼承了Statement接口的所有功能,并添加了一系列設置占位符參數值的方法父接口SQL注入問題可以避免SQL注入問題存在SQL注入隱患執行效率可對SQL進行預編譯,提高SQL執行效率會使數據庫頻繁編譯SQL,可能造成數據庫緩沖溢出例3-2使用JDBC實現將新聞類別信息添加到新聞類別表案例技能點:JDBC工作原理,數據庫訪問步驟,JDBCAPI綜合應用。實現步驟如下。①在MySQL數據庫中做好數據準備,依據工作單元1中的數據庫設計,在news數據庫中新建新聞類別表NRC_TYPE(t_id,t_name,t_memo)。②打開IntelliJIDEA,基于項目newspro,在項目的src/main/java目錄下新建包和類:cn.sdcet.entity.Type。例3-2使用JDBC實現將新聞類別信息添加到新聞類別表③
在項目的src/main/java目錄下新建包cn.sdcet.dao,在此包下新建接口TypeDao,在接口中定義添加新聞類別的抽象方法add(),詳細代碼如下。packagecn.sdcet.dao;importcn.sdcet.entity.Type;importjava.util.List;public
interfaceTypeDao{
publicBooleanadd(Typetype);//添加新聞類別
}例3-2使用JDBC實現將新聞類別信息添加到新聞類別表④
在項目源代碼下新建包cn.sdcet.dao.impl,在此包下定義實現類TypeDaoImpl(繼承自BaseDao類),實現接口TypeDao,TypeDaoImpl類的詳細代碼如下。publicclassTypeDaoImplextendsBaseDaoimplementsTypeDao{//繼承自例3-1中的BaseDao類@OverridepublicBooleanadd(Typetype){Booleanflag=false;Stringsql="insertintonrc_type(t_id,t_name)value(?,?)";try{Connectioncon=super.getConnection();PreparedStatementpstm=con.prepareStatement(sql);pstm.setInt(1,type.getT_id());pstm.setString(2,type.getT_name());pstm.executeUpdate();flag=true;}catch(Exceptione){e.printStackTrace();}finally{super.closeAll();if(pstm!=null){try{pstm.close();}catch(SQLExceptionthrowables){throwables.printStackTrace();}}}returnflag;}}例3-2使用JDBC實現將新聞類別信息添加到新聞類別表⑤
在項目的cn.sdcet.dao包下新建測試類TestDao,代碼如下。publicclassTestDao{publicstaticvoidtestAdd(){System.out.println("*******添加新聞類別*******");System.out.println("請輸入新增新聞類別編號:");Scannerscan=newScanner(System.in);intt_id=scan.nextInt();System.out.println("請輸入新增新聞類別名稱:");Stringt_name=scan.next();Typetype=newType(t_id,t_name);booleanflag=newTypeDaoImpl().add(type);if(flag){System.out.println("添加成功!");}else{System.out.println("添加失敗!");}}publicstaticvoidmain(String[]args){testAdd();}}例3-2使用JDBC實現將新聞類別信息添加到新聞類別表運行測試類,運行結果如圖所示。例3-3查詢并輸出新聞類別表信息案例技能點:JDBC工作原理,數據庫訪問步驟,JDBCAPI綜合應用。實現步驟如下。①
在例3-2的項目代碼基礎上完成本案例。打開IntelliJIDEA,在項目的TypeDao接口中添加查詢新聞類別的search()方法,方法體代碼如下。packagecn.sdcet.dao;importcn.sdcet.entity.Type;importjava.util.List;public
interfaceTypeDao{
publicBooleanadd(Typetype);
publicListsearch();//查詢新聞類別}例3-3查詢并輸出新聞類別表信息②
在項目的TypeDaoImpl類中添加測試查詢新聞類別的testSearch()方法,方法體代碼如下。publicListsearch(){ArrayListtypeList=newArrayList();try{Connectioncon=super.getConnection();Stringsql="select*fromnrc_type";PreparedStatementpstm=con.prepareStatement(sql);ResultSetrs=pstm.executeQuery(sql);while(rs.next()){intt_id=rs.getInt(1);Stringt_name=rs.getString(2);Stringt_memo=rs.getString(3);Typetype=newType(t_id,t_name,t_memo);typeList.add(type);}}catch(Exceptione){e.printStackTrace();}finally{super.closeAll();}returntypeList;}例3-3查詢并輸出新聞類別表信息③
在項目的TestDao類中添加測試查詢新聞類別的testSearch()方法,并在主方法中調用此方法,代碼如下。publicstaticvoidtestSearch(){ListtypeList=newTypeDaoImpl().search();typeList.forEach(type->System.out.println(type));}publicstaticvoidmain(String[]args){//testAdd();testSearch();//調用測試查詢方法}例3-3查詢并輸出新聞類別表信息代碼運行結果如圖所示。交流與討論通過交流討論對問題進行深入的探索:回憶課程的要點,思考一下幾個問題:JDBC程序訪問數據庫需要幾個步驟?JDBC常用類和接口感謝聆聽任務三:新聞發布系統訪問數據庫JavaWeb應用開發技術董蕾02應用數據庫連接池實現新聞信息修改任務描述本任務學習并理解數據庫連接池的工作原理、常用的數據庫連接池及用法,完成數據庫連接池的配置,從數據庫連接池獲取連接以實現更新新聞信息的功能。JDBC封裝操作JDBC本身提供的API是相對底層的,直接使用JDBC進行數據庫操作需要編寫大量的代碼,如創建數據庫連接、創建SQL語句、處理結果集等。通過封裝類,可以將這些重復的操作封裝成方法,以便在不同的業務場景中使用,避免重復編寫代碼,提高開發效率。JDBC封裝類還可以將數據庫連接的細節(如URL、用戶名、密碼)隱藏起來,通過配置文件等方式進行管理,避免直接在代碼中暴露敏感信息,提高了系統的安全性。JDBC封裝操作JDBC封裝類的創建步驟大體如下。首先,創建一個配置文件perties,并將其放置在項目的資源目錄下(對Maven項目來說,通常是src/main/resources),文件示例內容如下。url=jdbc:mysql://localhost:3306/your_databasedriverClass=com.mysql.jdbc.Driverusername=your_usernamepassword=your_passwordJDBC封裝操作其次,創建一個工具類DBUtil,該類包含讀取配置文件、創建數據庫連接、關閉數據庫連接等各模塊可以重用的操作方法,示例代碼如下。JDBC封裝操作public
classDBUtil{
privatestaticStringjdbcUrl;
privatestaticStringuserName;
privatestaticStringpassword;
//找到資源目錄下的配置文件
InputStreaminput=
DBUtil.class.getClassLoader().getResourceAsStream("perties");
//實例化Properties對象
Propertiesproperties=newProperties();
try{
//加載配置文件,完成配置文件的解析
properties.load(input);
//獲取參數
jdbcUrl=properties.getProperty("url");
username=properties.getProperty("username");
password=properties.getProperty("password");
//加載驅動
Class.forName(properties.getProperty("driverClass"));
}catch(IOException|ClassNotFoundExceptione){
e.printStackTrace();
}finally{
try{
if(input!=null){
input.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}JDBC封裝操作//獲取連接對象publicstaticConnectiongetConnection(){Connectionconnection=null;try{connection=DriverManager.getConnection(jdbcUrl,username,password);}catch(SQLExceptione){e.printStackTrace();}returnconnection;}//封裝關閉連接為通用方法publicstaticvoidcloseConnection(Connectionconn,PreparedStatementpst,ResultSetrs){try{if(conn!=null){conn.close();}if(pst!=null){pst.close();}if(rs!=null){rs.close();}}catch(SQLExceptione){e.printStackTrace();}}數據庫連接池配置普通JDBC連接,每次操作數據庫前,都需要創建一個新的數據庫連接。操作完成后,需要手動關閉連接。頻繁地創建和關閉連接會增加系統開銷,影響性能。數據庫連接池可以很好地解決這個問題,有效減少創建和關閉連接的開銷。數據庫連接池配置1.數據庫連接池概述(1)數據庫連接池原理普通的JDBC數據庫連接使用DriverManager類來實現,每次與數據庫建立連接的時候都要將Connection加載到內存中,再驗證用戶名和密碼(需要花費0.05~1s)。需要連接數據庫的時候,就向數據庫連接地申請一個連接,執行完成后再斷開連接。這樣的方式將會消耗大量的資源和時間。數據庫的連接資源并沒有得到很好的重復利用。若同時有幾百人甚至幾千人在線,頻繁地進行數據庫連接操作將占用很多的系統資源,嚴重時甚至會導致服務器崩潰。數據庫連接池配置數據庫連接池就是為數據庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩沖池”中取出一個,使用完畢后再放回去。數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而不是重新建立一個。數據庫連接池在初始化時將創建一定數量的數據庫連接,這些數據庫連接的數量取決于最小連接數,無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大連接數限定了這個連接池至多能擁有的數據庫連接數,當應用程序向連接池請求的連接數超過最大連接數時,這些請求將被加入等待隊列中.數據庫連接池配置(2)JDBC連接池的運行步驟JDBC連接池的運行步驟如下。①
初始化連接池。在應用程序啟動時,JDBC連接池會根據預設的參數(如最小連接數、最大連接數等)初始化一定數量的數據庫連接。這些連接被保存在連接池中,等待應用程序使用。②
連接的分配。當應用程序需要與數據庫進行交互時,不是直接創建一個新的數據庫連接,而是向連接池請求一個連接。連接池如果有空閑的連接,會分配一個給應用程序。如果沒有空閑連接,并且當前連接數小于最大連接數,連接池會創建一個新的連接供應用程序使用。數據庫連接池配置③
連接的使用和回收。應用程序使用從連接池中獲得的連接進行數據庫操作。操作完成后,不是關閉連接,而是將連接返回給連接池。④
連接的管理。連接池會管理返回的連接,將其標記為可用狀態,以便為其他請求所使用。如果連接長時間未被使用,連接池可能會關閉這些連接以釋放資源。⑤
連接的維護。連接池會定期檢查池中連接的狀態,確保連接的有效性。如果發現無效連接,會將其從池中移除,并可能創建新的連接以保證池中的連接數。數據庫連接池配置(3)JDBC連接池優勢①
性能提升。②
資源節約。③
穩定性增強。④
開發效率提高。⑤
靈活性與可配置性。⑥
安全性增強。數據庫連接池配置(4)常用的JDBC連接池在Java中,JDBC連接池通常是通過第三方庫實現的。常用的JDBC連接池有Druid、HikariCP、C3P0等。數據庫連接池配置2.Druid連接池常用的類及方法(1)DruidDataSource類DruidDataSource類是Druid連接池的核心類,它負責管理數據庫連接的創建、關閉、分配和回收,常用方法如下。①init():初始化連接池。②close():關閉連接池,釋放所有資源。③getConnection():從連接池中獲取一個數據庫連接。④setUrl(Stringurl):設置數據庫的JDBCURL。數據庫連接池配置⑤setUsername(Stringusername):設置數據庫的用戶名。⑥setPassword(Stringpassword):設置數據庫的密碼。⑦setDriverClassName(StringdriverClassName):設置數據庫的JDBC驅動類名。⑧setInitialSize(intinitialSize):設置連接池初始大小。⑨setMaxActive(intmaxActive):設置連接池最大連接數。⑩setMinIdle(intminIdle):設置連接池最小空閑連接數。setMaxWait(longmaxWait):設置獲取連接的最大等待時間。setTimeBetweenEvictionRunsMillis(longtimeBetweenEvictionRunsMillis):設置間隔多久進行一次空閑連接的回收。數據庫連接池配置(2)DruidPooledConnection類DruidPool
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年山東省菏澤市中考歷史真題
- 花崗巖開采管理制度
- 茶葉修剪隊管理制度
- 防疫督導員管理制度
- 課外閱讀專項-部編人教版小學三年級語文下冊試卷-部編人教版小學三年級語文下冊試卷
- 設備維修合同 (三)
- 設備機組維修技術培訓方案及質量保證措施
- 哈爾濱市第九中學校2024-2025學年高二下學期6月月考政治試卷(含答案)
- 大班各領域教育內容要點及實施策略探討
- 【高中語文】《六國論》課文深度解析+統編版高一語文必修下冊
- 解決多模穴流動不平衡問題之流道翻轉技術
- 民俗文化的產業化發展
- 抖音新號怎么養號
- 中央廣播電視大學畢業生登記表-6
- 國開02316-中級財務會計(一)機考復習資料
- 垃圾滲濾液應急處理服務投標方案技術標
- 大數據技術求職個人簡歷模板
- 夜市治安管理應急預案
- 建筑結構的風荷載計算與抗風設計
- 醫院培訓課件:《疑難病例討論制度及護理查房制度解讀》
- 《安全課件:如何保護個人信息》
評論
0/150
提交評論