版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
學(xué)生管理系統(tǒng)登錄子模塊開發(fā)安徽工商職業(yè)學(xué)院電子系學(xué)生管理系統(tǒng)登錄子模塊開發(fā)安徽工商職業(yè)學(xué)院電子系開發(fā)任務(wù)開發(fā)學(xué)生管理系統(tǒng)登錄子模塊完成如下功能:把登錄頁的用戶登錄信息發(fā)送到我們設(shè)計好的信息校驗頁連接后臺數(shù)據(jù)庫,驗證用戶的登錄信息對驗證結(jié)果進行服務(wù)器跳轉(zhuǎn)處理防止匿名用戶的惡意登陸使用Cookie技術(shù)保存用戶的登錄信息,使用戶不用輸入賬戶密碼直接登錄開發(fā)任務(wù)開發(fā)學(xué)生管理系統(tǒng)登錄子模塊完成如下功能:掌握From表單的發(fā)送信息方式掌握Request對象獲取用戶填寫的登錄信息掌握如何連接數(shù)據(jù)庫(兩種方法、四種數(shù)據(jù)庫)掌握如何對用戶登錄信息進行校驗開發(fā)重點掌握From表單的發(fā)送信息方式開發(fā)重點熟練掌握JDBC-ODBC連接數(shù)據(jù)庫,數(shù)據(jù)庫文件路徑的獲取深刻理解匿名惡意登錄的處理對策熟練使用Cookie存儲用戶的登錄信息掌握調(diào)用Cookie中存儲的用戶信息的相關(guān)方法開發(fā)難點熟練掌握JDBC-ODBC連接數(shù)據(jù)庫,數(shù)據(jù)庫文件路徑的獲取開項目前臺界面設(shè)計復(fù)習(xí)項目前臺界面設(shè)計復(fù)習(xí)項目前臺界面設(shè)計復(fù)習(xí)套用現(xiàn)有模板進行設(shè)計(企業(yè)開發(fā)模板最好)使用FireworksCS4進行切片設(shè)計使用DreamweaverCS4進行布局設(shè)計使用IEtest軟件進行多瀏覽器測試。(企業(yè)級開發(fā)必備步驟)項目前臺界面設(shè)計復(fù)習(xí)套用現(xiàn)有模板進行設(shè)計(企業(yè)開發(fā)模板最好)項目前臺界面設(shè)計復(fù)習(xí)前臺界面兩個細節(jié)的處理:如何將模板中文字、圖像進行移位處理背景圖像的漸進色處理(切片的選取、背景色的設(shè)置、repeat參數(shù)的使用)項目前臺界面設(shè)計復(fù)習(xí)前臺界面兩個細節(jié)的處理:項目前臺界面設(shè)計復(fù)習(xí)經(jīng)過以上分析,基本上可以得到一個比較“正?!钡捻撁妗OM瑢W(xué)們注意的是:前臺界面設(shè)計的美工很重要,內(nèi)容多而繁雜,有些操作甚至遠遠超出了我們的課程范圍,本課程主要講解的后臺程序的開發(fā),要努力學(xué)習(xí)后臺處理機制的設(shè)計。在公司中一個正規(guī)的WEB項目開發(fā),必須有三類人員共同協(xié)作才能完成:前臺美工人員(藝術(shù)設(shè)計專業(yè)人員:對色彩敏感)后臺程序開發(fā)人員(主要負責(zé)內(nèi)部處理機制和服務(wù)器處理)數(shù)據(jù)庫設(shè)計人員(負責(zé)關(guān)系型數(shù)據(jù)庫的設(shè)計)本次項目開發(fā),同學(xué)們將會將這三類人員的角色全部體驗一遍。項目前臺界面設(shè)計復(fù)習(xí)經(jīng)過以上分析,基本上可以得到一個比較“正后臺登陸流程圖login.jsp輸入帳號、密碼。Logincheck.jsp進行驗證根據(jù)驗證結(jié)果進行轉(zhuǎn)發(fā)Login.jsp(用戶登錄頁)Logincheck.jsp(用戶登錄信息校驗頁)登錄成功頁DBServer登錄失敗頁根據(jù)處理結(jié)果進行跳轉(zhuǎn)后臺登陸流程圖login.jsp輸入帳號、密碼。Login.
后臺程序開發(fā)-----發(fā)送用戶登錄信息使用Form表單提交用戶的登錄信息:(login.jsp)<formid=“l(fā)ogform”name=“l(fā)ogform”method=“post”action=“l(fā)ogincheck.jsp”>
<inputtype="text"name="log_user"/><inputtype="text"name="log_pass"/>
</form>
使用request.getParameter()方法獲取用戶填寫的登錄信息(logincheck.jsp)Stringname=request.getParameter("log_user");Stringpass=request.getParameter("log_pass");后臺程序開發(fā)-----發(fā)送用戶登錄信息使用Form表單提交后臺程序開發(fā)----連接數(shù)據(jù)庫操作數(shù)據(jù)庫連接一般有3種方法:利用JDBC-ODBC(第一類)專用驅(qū)動程序(第二類)利用數(shù)據(jù)庫廠家提供的函數(shù)庫,直接編程。(很少使用)連接效率增高JDBC是Java數(shù)據(jù)庫連接技術(shù)的簡稱,提供連接各種常用數(shù)據(jù)庫的能力。是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一的訪問接口。在這里我們介紹一種通用的數(shù)據(jù)庫連接方法:連接四種數(shù)據(jù)庫(ACCESS、MYSQL、SQLSERVER、ORACLE)后臺程序開發(fā)----連接數(shù)據(jù)庫操作數(shù)據(jù)庫連接一般有3種方法:為什么不直接使用ODBCODBC不適合在Java中直接使用:ODBC是一個C語言實現(xiàn)的API,從Java中調(diào)用本地的C程序在安全性、完整性、健壯性方面都有缺點。無法精確實現(xiàn)從ODBCAPI到JavaAPI的翻譯(語言的限制:指針支持)。ODBC很難學(xué)不再是純Java為什么不直接使用ODBCODBC不適合在Java中直接使用:JDBC連接數(shù)據(jù)庫的兩大類基本操作JDBC驅(qū)動由數(shù)據(jù)庫廠商提供在個人開發(fā)與測試中,可以使用JDBC-ODBC橋連方式在生產(chǎn)型開發(fā)中,推薦使用純Java驅(qū)動方式DBServerDBServerJDBCAPIJDBCDriverManager純Java驅(qū)動JDBC–ODBC橋Java應(yīng)用程序ODBCJDBC連接數(shù)據(jù)庫的兩大類基本操作JDBC驅(qū)動由數(shù)據(jù)庫廠商提JDBC程序的工作原理JDBCAPI提供者:sun公司(Oracle公司)內(nèi)容:供程序員調(diào)用的接口與類,集成在java.sql和javax.sql包中,如:DriverManager類Connection接口Statement接口ResultSet接口DriverManager提供者:sun公司(Oracle公司)作用:載入各種不同的JDBC驅(qū)動JDBC驅(qū)動提供者:數(shù)據(jù)庫廠商作用:負責(zé)連接各種不同的數(shù)據(jù)庫SqlServerOracleJDBCAPIJDBCDriverManagerJDBC驅(qū)動JDBC驅(qū)動Java應(yīng)用程序JDBC程序的工作原理JDBCAPISqlOracleJJDBCAPIJDBCAPI可做三件事:與數(shù)據(jù)庫建立連接、執(zhí)行SQL語句、處理結(jié)果ConnectionDriverManagerPreparedStatementResultSet
DriverManager:依據(jù)數(shù)據(jù)庫的不同,管理JDBC驅(qū)動
Connection:負責(zé)連接數(shù)據(jù)庫并擔(dān)任傳送數(shù)據(jù)的任務(wù)
PreparedStatement:由Connection產(chǎn)生、負責(zé)執(zhí)行SQL語句
ResultSet:負責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果客戶端數(shù)據(jù)庫服務(wù)器1234JDBCAPIJDBCAPI可做三件事:與數(shù)據(jù)庫建立連接JDBC-ODBC方式連接Access數(shù)據(jù)庫橋連將對JDBCAPI的調(diào)用,轉(zhuǎn)換為對另一組數(shù)據(jù)庫連接API的調(diào)用優(yōu)點:可以訪問所有ODBC可以訪問的數(shù)據(jù)庫缺點:執(zhí)行效率低、功能不夠強大(Access例外)JDBC-ODBC橋Java應(yīng)用程序JDBCAPIODBCAPIODBC層DBServerJDBC-ODBC方式連接Access數(shù)據(jù)庫橋連JDBC-O課本上介紹的方式使用JDBC-ODBC進行橋連1、在控制面板ODBC數(shù)據(jù)源系統(tǒng)DSN中配置數(shù)據(jù)源2、編程,通過橋連方式與數(shù)據(jù)庫建立連接------語法------Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:DataBase","","");JDBC-ODBC橋驅(qū)動類的完全限定類名數(shù)據(jù)源名稱課本上介紹的方式使用JDBC-ODBC進行橋連------語本項目推薦使用的方式使用JDBC-ODBC進行橋連1、定義基本的數(shù)據(jù)庫驅(qū)動信息與數(shù)據(jù)庫登錄信息2、編程,數(shù)據(jù)庫建立連接------語法------publicstaticfinalStringDBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";publicstaticStringDBURL="jdbc:odbc:Driver={MicrosoftAccessDriver(*.mdb)};DBQ=";publicstaticfinalStringDBUSER="";publicstaticfinalStringDBPASS="";Class.forName(DBDRIVER);conn=DriverManager.getConnection(URL,DBUSER,DBPASS);DBURL+真實的路徑本項目推薦使用的方式使用JDBC-ODBC進行橋連-----本項目推薦使用的方式使用JDBC-ODBC進行橋連------語法------publicstaticfinalStringDBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";publicstaticStringDBURL="jdbc:odbc:Driver={MicrosoftAccessDriver(*.mdb)};DBQ=";publicstaticfinalStringDBUSER="";publicstaticfinalStringDBPASS="";Class.forName(DBDRIVER);conn=DriverManager.getConnection(URL,DBUSER,DBPASS);Stringdbpath=application.getRealPath("\\Database\\Database.mdb");StringURL=DBURL+dbpath;DBURL+真實的路徑本項目推薦使用的方式使用JDBC-ODBC進行橋連-----JDBC驅(qū)動連接數(shù)據(jù)庫純Java驅(qū)動由JDBC驅(qū)動直接訪問數(shù)據(jù)庫優(yōu)點:100%Java,快又可跨平臺缺點:訪問不同的數(shù)據(jù)庫需要下載專用的JDBC驅(qū)動JDBC
驅(qū)動Java應(yīng)用程序JDBCAPIDBServerJDBC驅(qū)動連接數(shù)據(jù)庫純Java驅(qū)動JDBC驅(qū)動JavJDBC驅(qū)動連接數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包2、將驅(qū)動程序包引入工程中3、編程,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接4、基本書寫格式與JDBC-ODBC方式完全一致------語法------publicstaticfinalStringDBDRIVER=“………….";publicstaticfinalStringDBURL=“………………..”publicstaticfinalStringDBUSER=“………………";publicstaticfinalStringDBPASS=“………………...";Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);JDBC驅(qū)動連接數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連---JDBC驅(qū)動連接Oracle數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包ojdbc12.jar2、將驅(qū)動程序包引入工程中3、編程,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接------語法------publicstaticfinalStringDBDRIVER=“oracle.jdbc.driver.OracleDriver";publicstaticfinalStringDBURL=“jdbc:oracle:thin:@localhost:1521:huyp”;publicstaticfinalStringDBUSER=“數(shù)據(jù)庫登錄用戶名(默認scott)";publicstaticfinalStringDBPASS=“數(shù)據(jù)庫登錄用戶密碼(默認tiger)";Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);IP端口號用戶名JDBC驅(qū)動連接Oracle數(shù)據(jù)庫使用純Java驅(qū)動方式進JDBC驅(qū)動連接MYSQL數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包mysql-connector-java-5.1.7-bin.jar2、將驅(qū)動程序包引入工程中3、編程,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接------語法------publicstaticfinalStringDBDRIVER=“com.mysql.jdbc.Driver
";publicstaticfinalStringDBURL=“jdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱”;publicstaticfinalStringDBUSER=“數(shù)據(jù)庫登錄用戶名";publicstaticfinalStringDBPASS=“數(shù)據(jù)庫登錄用戶密碼";Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);JDBC驅(qū)動連接MYSQL數(shù)據(jù)庫使用純Java驅(qū)動方式進行六步使用JDBC加載JDBCDriver獲取與數(shù)據(jù)庫Connection創(chuàng)建PreparedStatement對象執(zhí)行SQL語句處理ResultSet(針對查詢語句)關(guān)閉Connection六步使用JDBC加載JDBCDriverJDBC程序編寫過程JDBC程序編寫過程JDBC程序的工作模板try{
Class.forName(JDBC驅(qū)動類);}catch(ClassNotFoundExceptione){System.out.println("無法找到驅(qū)動類");}try{Connectioncon=DriverManager.getConnection(JDBCURL,數(shù)據(jù)庫用戶名,密碼);
Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");
while(rs.next()){intx=rs.getInt("a");Strings=rs.getString("b");floatf=rs.getFloat("c");}
con.close();}catch(SQLExceptione){e.printStackTrace();}獲得數(shù)據(jù)庫連接發(fā)送Sql語句處理結(jié)果注冊JDBC驅(qū)動JDBCURL用來標識數(shù)據(jù)庫必須處理的異常釋放資源必須處理的異常JDBC程序的工作模板try{獲得數(shù)據(jù)庫連接發(fā)送Sql語句1)加載JDBCDriver使用DriverManager
類加載JDBCDriverDriverManager
類是
JDBC
的管理層,作用于用戶和驅(qū)動程序之間,它跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接.加載
Driver
類的方式:
Class.forName(“com.db.Driver");
所有
Driver
類都包含一個靜態(tài)部分,它創(chuàng)建該類的實例,然后在加載該實例時在DriverManager類中進行注冊DriverManager
類包含一列
Driver
類,它們已通過調(diào)用方法DriverManager.registerDriver對自己進行了注冊1)加載JDBCDriver使用DriverManageTestJDBC1.javaMain:try{//1Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundExceptione){e.printStackTrace();//若驅(qū)動沒找到,則怎么辦}TestJDBC1.javaMain:TestJDBC1.javaMain:Connectionconn=null;//2Stringurl="jdbc:sqlserver://:1433;databasename=test";conn=DriverManager.getConnection(url,"root","");TestJDBC1.javaMain:3)創(chuàng)建Statement對象Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。存在三種Statement對象:StatementPreparedStatement(從Statement繼承而來)CallableStatement(從PreparedStatement繼承而來)Statement對象由Connection的createStatement()方法創(chuàng)建:3)創(chuàng)建Statement對象Statement對象用于將TestJDBC1.javaMain://3Statementst=conn.createStatement();TestJDBC1.javaMain:4)執(zhí)行SQL語句Statement接口的常用方法:用于產(chǎn)生單個結(jié)果集的語句,例如SELECT語句。publicResultSetexecuteQuery(Stringsql)throwsSQLException用于執(zhí)行INSERT,UPDATE或DELETE語句以及SQLDDL語句,例如CREATETABLE和DROPTABLE。該方法返回一個整數(shù),指示受影響的行數(shù)。對于CREATETABLE或DROPTABLE等不操作行的語句,返回值總為零。publicintexecuteUpdate(Stringsql)throwsSQLException關(guān)閉Statement對象publicvoidclose()throwsSQLException4)執(zhí)行SQL語句Statement接口的常用方法:TestJDBC1.javaMain://4Stringsql="select*fromloginuser";ResultSetrs=st.executeQuery(sql);//或者執(zhí)行更新,刪除,插入數(shù)據(jù)Stringsql=“insertintoemailuservalues(‘a(chǎn)aa’,’ccc’)";introw=st.executeUpdate(sql);TestJDBC1.javaMain:5)處理返回結(jié)果(ResultSet)ResultSet包含符合SQL語句條件的所有行,并且它通過一套getXxx()方法提供了對這些行中數(shù)據(jù)的訪問。取得當前行中第columnIndex列的整數(shù)的值。intgetInt(intcolumnIndex)取得當前行中列名為columnName的整數(shù)的值。intgetInt(StringcolumnName)取得當前行中第columnIndex列的字符串的值。StringgetString(intcolumnIndex)取得當前行中列名為columnName的字符串的值。StringgetString(StringcolumnName)5)處理返回結(jié)果(ResultSet)ResultSet包含ResultSet接口其他常用方法ResultSet維護指向其當前數(shù)據(jù)行的光標,光標向下移動一行的方法:booleannext()關(guān)閉ResultSet對象voidclose()ResultSet接口其他常用方法ResultSet維護指向TestJDBC1.javaMain://5while(rs.next()){System.out.println(rs.getInt(1)+"---"+rs.getString("username")+"---"+rs.getString("userpass"));}TestJDBC1.javaMain:6)關(guān)閉連接按照創(chuàng)建對象相反的順序關(guān)閉連接rs.close();//若是更新就沒有這一步st.close();conn.close();6)關(guān)閉連接按照創(chuàng)建對象相反的順序關(guān)閉連接使用Statement插入數(shù)據(jù)2-1——代碼片斷——publicstaticvoidmain(String[]args){Connectioncon=null;Statementst=null;try{StringstrSql="insertintoemailuservalues('軍事','網(wǎng)管')";try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundExceptione){System.out.println("無法找到驅(qū)動類");}con=DriverManager.getConnection("jdbc:sqlserver://:1433;database=test","sa",“602");st=con.createStatement();st.executeUpdate(strSql);st.close();}catch(SQLExceptionsqlE){sqlE.printStackTrace();}finally{con.close();}}建立連接執(zhí)行sql語句數(shù)據(jù)庫連接使用完畢,及時釋放載入JDBC驅(qū)動類異常處理異常處理使用Statement插入數(shù)據(jù)2-1——代碼片斷——建立連綜合案例在servlet中演示第一步:注冊頁面(register.jsp)RegisterServlet
實現(xiàn)插入值的操作第二步:
查看所有用戶信息。通過超鏈接---SearchAllServlet
實現(xiàn)查詢功能
綜合案例在servlet中演示案例小結(jié)發(fā)現(xiàn)一些問題:
1:動態(tài)參數(shù)的處理statement較麻煩
2:連接數(shù)據(jù)庫的代碼類似,重復(fù)了。
3:想把結(jié)果返回到頁面太麻煩。
------不能到指定頁面;
------使用out.print(),構(gòu)建頁面太復(fù)雜
案例小結(jié)發(fā)現(xiàn)一些問題:小結(jié)2在使用純Java驅(qū)動方式進行數(shù)據(jù)庫連接時,如果程序在運行時拋出異常:
java.sql.SQLException:Nosuitabledriverfoundforjdbc:microsoft:sqlserver://localhost:1433;DatabaseName=news
那么出錯的原因是什么?如何解決?請單獨建立一個類ConnectionManager,專門負責(zé)建立數(shù)據(jù)庫連接、以及關(guān)閉連接,并思考這樣做帶來的好處是什么找不到合適的驅(qū)動類,原因:沒有把數(shù)據(jù)庫驅(qū)動包引入工程好處在于:既便于管理、又可以提高代碼的復(fù)用性完整代碼實現(xiàn)小結(jié)2在使用純Java驅(qū)動方式進行數(shù)據(jù)庫連接時,如果程序在PreparedStatementPreparedStatement接口(預(yù)編譯的SQL語句)Statement接口當
SQL
語句將運行多次時,盡量使用PreparedStatement,以便提高運行效率當sql語句中的某個值不固定時,使用PreparedStatementPreparedStatement接口繼承Statement接口PreparedStatement比普通的Statement對象使用起來更加靈活,更有效率PreparedStatementpst=conn.preparedStatement(sql);PreparedStatementPreparedStatPreparedStatementSql的寫法---不固定的值用“?”代替例如insertintoemailuser(name,pass)values(?,?)select*fromemailuserwhereuserid=?為“?”設(shè)置值
pst.setInt(序號,值);------序號指的是sql中第幾個”?”號
pst.setString(序號,值);
pst.setDate(序號,值);常用方法
ResultSetexecuteQuery()intexecuteUpdate()PreparedStatementSql的寫法---不固定的使用PreparedStatement插入數(shù)據(jù)publicclassNewsFirstTitleDB2{publicstaticvoidmain(String[]args){Connectioncon=null;PreparedStatementpst=null;try{con=ConnectionManager.getConnection();StringstrSql="insertintoemailuservalues(?,?,?)";pst=con.prepareStatement(strSql);pst.setInt(1,1);pst.setString(2,"軍事");pst.setString(3,"管理員");pStatement.executeUpdate();Pst.close();}catch(SQLExceptionsqlE){sqlE.printStackTrace();}finally{Con.close();}}}參數(shù)化的查詢語句設(shè)置每個
?
參數(shù)的值,列號從1開始執(zhí)行sql語句使用PreparedStatement插入數(shù)據(jù)public使用PreparedStatement刪除數(shù)據(jù)publicclassNewsFirstTitleDB3{publicstaticvoidmain(String[]args){Connectioncon=null;PreparedStatementpStatement=null;try{con=ConnectionManager.getConnection();StringstrSql="deletefromemailuserwhereusername=?";pStatement=con.prepareStatement(strSql);pStatement.setString(1,"軍事");introw=pStatement.executeUpdate();System.out.println(“成功刪除了"+row+"行數(shù)據(jù)!");Pst.close();}catch(SQLExceptionsqlE){sqlE.printStackTrace();}finally{con.close();}}}返回刪除記錄的行數(shù)使用PreparedStatement刪除數(shù)據(jù)public使用PreparedStatement更新數(shù)據(jù)publicclassNewsFirstTitleDB4{publicstaticvoidmain(String[]args){Connectioncon=null;PreparedStatementpStatement=null;try{con=ConnectionManager.getConnection();StringSql="updateemailusersetusername=?whereuserid=?";pStatement=con.prepareStatement(Sql);pStatement.setString(1,"編輯");pStatement.setInt(2,1);introw=pStatement.executeUpdate();System.out.println("成功更新了"+row+"行數(shù)據(jù)!");Pst.close();}catch(SQLExceptionsqlE){sqlE.printStackTrace();}finally{Con.close();}}}返回更新記錄的行數(shù)使用PreparedStatement更新數(shù)據(jù)public小結(jié)3使用PreparedStatement語句執(zhí)行如下操作:刪除表emailuser中所有userid小于10的記錄,并在控制臺輸出刪除記錄的行數(shù)完整代碼實現(xiàn)小結(jié)3使用PreparedStatement語句執(zhí)行如下操使用PreparedStatement查詢數(shù)據(jù)2-1publicclassNewsFirstTitleDB5{publicstaticvoidmain(String[]args){intid=0;Connectioncon=null;PreparedStatementpstmt=null;ResultSetresSet=null;try{con=ConnectionManager.getConnection();StringsqlStr="selectmax(id)fromFirstLevelTitle";pstmt=con.prepareStatement(sqlStr);ResultSetresSet=pstmt.executeQuery();if(resSet.next()){id=resSet.getInt(1);}}catch(Exceptione){e.printStackTrace();}finally{ConnectionManager.closeResultSet(resSet);ConnectionManager.closeStatement(pstmt);ConnectionManager.closeConnection(con);}System.out.println("新的一級新聞標題的Id為:"+(id+1));}}查詢新聞一級標題的Id的最大值關(guān)閉結(jié)果集、語句、以及連接對新聞一級標題Id的最大值加一,作為新的一級標題的Id獲取數(shù)據(jù),列號從1開始返回結(jié)果集使用PreparedStatement查詢數(shù)據(jù)2-1pub
從數(shù)據(jù)庫中取出所有的新聞一級標題——代碼片斷——publicstaticListgetAllFirstLevelTitleList(){//省略部分變量聲明語句ArrayListlist=newArrayList();try{dbConnection=ConnectionManager.getConnection();StringstrSql="select*fromFirstLevelTitleorderbyCreateTimedesc";pStatement=dbConnection.prepareStatement(strSql);res=pStatement.executeQuery();while(res.next()){intid=res.getInt("id");Stringtitle=res.getString("TitleName");Stringcreator=res.getString("Creator");Datetime=res.getDate(“CreateTime”);FirstLevelTitlefTitle=newFirstLevelTitle(id,title,creator,time);list.add(fTitle); }}//省略catch、finally子句returnlist;}使用PreparedStatement查詢數(shù)據(jù)2-2查詢新聞一級標題創(chuàng)建標題對象,并添加入ArrayList中返回結(jié)果集完整代碼實現(xiàn)從數(shù)據(jù)庫中取出所有的新聞一級標題——代碼片斷——使用Pre總結(jié)使用PreparedStatement語句執(zhí)行如下操作:取出表FirstLevelTitle中Id的最大值向表FirstLevelTitle中插入一行新記錄,其中Id值為原Id最大值加一完整代碼實現(xiàn)總結(jié)使用PreparedStatement語句執(zhí)行如下操作:學(xué)生管理系統(tǒng)登錄子模塊開發(fā)安徽工商職業(yè)學(xué)院電子系學(xué)生管理系統(tǒng)登錄子模塊開發(fā)安徽工商職業(yè)學(xué)院電子系開發(fā)任務(wù)開發(fā)學(xué)生管理系統(tǒng)登錄子模塊完成如下功能:把登錄頁的用戶登錄信息發(fā)送到我們設(shè)計好的信息校驗頁連接后臺數(shù)據(jù)庫,驗證用戶的登錄信息對驗證結(jié)果進行服務(wù)器跳轉(zhuǎn)處理防止匿名用戶的惡意登陸使用Cookie技術(shù)保存用戶的登錄信息,使用戶不用輸入賬戶密碼直接登錄開發(fā)任務(wù)開發(fā)學(xué)生管理系統(tǒng)登錄子模塊完成如下功能:掌握From表單的發(fā)送信息方式掌握Request對象獲取用戶填寫的登錄信息掌握如何連接數(shù)據(jù)庫(兩種方法、四種數(shù)據(jù)庫)掌握如何對用戶登錄信息進行校驗開發(fā)重點掌握From表單的發(fā)送信息方式開發(fā)重點熟練掌握JDBC-ODBC連接數(shù)據(jù)庫,數(shù)據(jù)庫文件路徑的獲取深刻理解匿名惡意登錄的處理對策熟練使用Cookie存儲用戶的登錄信息掌握調(diào)用Cookie中存儲的用戶信息的相關(guān)方法開發(fā)難點熟練掌握JDBC-ODBC連接數(shù)據(jù)庫,數(shù)據(jù)庫文件路徑的獲取開項目前臺界面設(shè)計復(fù)習(xí)項目前臺界面設(shè)計復(fù)習(xí)項目前臺界面設(shè)計復(fù)習(xí)套用現(xiàn)有模板進行設(shè)計(企業(yè)開發(fā)模板最好)使用FireworksCS4進行切片設(shè)計使用DreamweaverCS4進行布局設(shè)計使用IEtest軟件進行多瀏覽器測試。(企業(yè)級開發(fā)必備步驟)項目前臺界面設(shè)計復(fù)習(xí)套用現(xiàn)有模板進行設(shè)計(企業(yè)開發(fā)模板最好)項目前臺界面設(shè)計復(fù)習(xí)前臺界面兩個細節(jié)的處理:如何將模板中文字、圖像進行移位處理背景圖像的漸進色處理(切片的選取、背景色的設(shè)置、repeat參數(shù)的使用)項目前臺界面設(shè)計復(fù)習(xí)前臺界面兩個細節(jié)的處理:項目前臺界面設(shè)計復(fù)習(xí)經(jīng)過以上分析,基本上可以得到一個比較“正?!钡捻撁?。希望同學(xué)們注意的是:前臺界面設(shè)計的美工很重要,內(nèi)容多而繁雜,有些操作甚至遠遠超出了我們的課程范圍,本課程主要講解的后臺程序的開發(fā),要努力學(xué)習(xí)后臺處理機制的設(shè)計。在公司中一個正規(guī)的WEB項目開發(fā),必須有三類人員共同協(xié)作才能完成:前臺美工人員(藝術(shù)設(shè)計專業(yè)人員:對色彩敏感)后臺程序開發(fā)人員(主要負責(zé)內(nèi)部處理機制和服務(wù)器處理)數(shù)據(jù)庫設(shè)計人員(負責(zé)關(guān)系型數(shù)據(jù)庫的設(shè)計)本次項目開發(fā),同學(xué)們將會將這三類人員的角色全部體驗一遍。項目前臺界面設(shè)計復(fù)習(xí)經(jīng)過以上分析,基本上可以得到一個比較“正后臺登陸流程圖login.jsp輸入帳號、密碼。Logincheck.jsp進行驗證根據(jù)驗證結(jié)果進行轉(zhuǎn)發(fā)Login.jsp(用戶登錄頁)Logincheck.jsp(用戶登錄信息校驗頁)登錄成功頁DBServer登錄失敗頁根據(jù)處理結(jié)果進行跳轉(zhuǎn)后臺登陸流程圖login.jsp輸入帳號、密碼。Login.
后臺程序開發(fā)-----發(fā)送用戶登錄信息使用Form表單提交用戶的登錄信息:(login.jsp)<formid=“l(fā)ogform”name=“l(fā)ogform”method=“post”action=“l(fā)ogincheck.jsp”>
<inputtype="text"name="log_user"/><inputtype="text"name="log_pass"/>
</form>
使用request.getParameter()方法獲取用戶填寫的登錄信息(logincheck.jsp)Stringname=request.getParameter("log_user");Stringpass=request.getParameter("log_pass");后臺程序開發(fā)-----發(fā)送用戶登錄信息使用Form表單提交后臺程序開發(fā)----連接數(shù)據(jù)庫操作數(shù)據(jù)庫連接一般有3種方法:利用JDBC-ODBC(第一類)專用驅(qū)動程序(第二類)利用數(shù)據(jù)庫廠家提供的函數(shù)庫,直接編程。(很少使用)連接效率增高JDBC是Java數(shù)據(jù)庫連接技術(shù)的簡稱,提供連接各種常用數(shù)據(jù)庫的能力。是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一的訪問接口。在這里我們介紹一種通用的數(shù)據(jù)庫連接方法:連接四種數(shù)據(jù)庫(ACCESS、MYSQL、SQLSERVER、ORACLE)后臺程序開發(fā)----連接數(shù)據(jù)庫操作數(shù)據(jù)庫連接一般有3種方法:為什么不直接使用ODBCODBC不適合在Java中直接使用:ODBC是一個C語言實現(xiàn)的API,從Java中調(diào)用本地的C程序在安全性、完整性、健壯性方面都有缺點。無法精確實現(xiàn)從ODBCAPI到JavaAPI的翻譯(語言的限制:指針支持)。ODBC很難學(xué)不再是純Java為什么不直接使用ODBCODBC不適合在Java中直接使用:JDBC連接數(shù)據(jù)庫的兩大類基本操作JDBC驅(qū)動由數(shù)據(jù)庫廠商提供在個人開發(fā)與測試中,可以使用JDBC-ODBC橋連方式在生產(chǎn)型開發(fā)中,推薦使用純Java驅(qū)動方式DBServerDBServerJDBCAPIJDBCDriverManager純Java驅(qū)動JDBC–ODBC橋Java應(yīng)用程序ODBCJDBC連接數(shù)據(jù)庫的兩大類基本操作JDBC驅(qū)動由數(shù)據(jù)庫廠商提JDBC程序的工作原理JDBCAPI提供者:sun公司(Oracle公司)內(nèi)容:供程序員調(diào)用的接口與類,集成在java.sql和javax.sql包中,如:DriverManager類Connection接口Statement接口ResultSet接口DriverManager提供者:sun公司(Oracle公司)作用:載入各種不同的JDBC驅(qū)動JDBC驅(qū)動提供者:數(shù)據(jù)庫廠商作用:負責(zé)連接各種不同的數(shù)據(jù)庫SqlServerOracleJDBCAPIJDBCDriverManagerJDBC驅(qū)動JDBC驅(qū)動Java應(yīng)用程序JDBC程序的工作原理JDBCAPISqlOracleJJDBCAPIJDBCAPI可做三件事:與數(shù)據(jù)庫建立連接、執(zhí)行SQL語句、處理結(jié)果ConnectionDriverManagerPreparedStatementResultSet
DriverManager:依據(jù)數(shù)據(jù)庫的不同,管理JDBC驅(qū)動
Connection:負責(zé)連接數(shù)據(jù)庫并擔(dān)任傳送數(shù)據(jù)的任務(wù)
PreparedStatement:由Connection產(chǎn)生、負責(zé)執(zhí)行SQL語句
ResultSet:負責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果客戶端數(shù)據(jù)庫服務(wù)器1234JDBCAPIJDBCAPI可做三件事:與數(shù)據(jù)庫建立連接JDBC-ODBC方式連接Access數(shù)據(jù)庫橋連將對JDBCAPI的調(diào)用,轉(zhuǎn)換為對另一組數(shù)據(jù)庫連接API的調(diào)用優(yōu)點:可以訪問所有ODBC可以訪問的數(shù)據(jù)庫缺點:執(zhí)行效率低、功能不夠強大(Access例外)JDBC-ODBC橋Java應(yīng)用程序JDBCAPIODBCAPIODBC層DBServerJDBC-ODBC方式連接Access數(shù)據(jù)庫橋連JDBC-O課本上介紹的方式使用JDBC-ODBC進行橋連1、在控制面板ODBC數(shù)據(jù)源系統(tǒng)DSN中配置數(shù)據(jù)源2、編程,通過橋連方式與數(shù)據(jù)庫建立連接------語法------Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:DataBase","","");JDBC-ODBC橋驅(qū)動類的完全限定類名數(shù)據(jù)源名稱課本上介紹的方式使用JDBC-ODBC進行橋連------語本項目推薦使用的方式使用JDBC-ODBC進行橋連1、定義基本的數(shù)據(jù)庫驅(qū)動信息與數(shù)據(jù)庫登錄信息2、編程,數(shù)據(jù)庫建立連接------語法------publicstaticfinalStringDBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";publicstaticStringDBURL="jdbc:odbc:Driver={MicrosoftAccessDriver(*.mdb)};DBQ=";publicstaticfinalStringDBUSER="";publicstaticfinalStringDBPASS="";Class.forName(DBDRIVER);conn=DriverManager.getConnection(URL,DBUSER,DBPASS);DBURL+真實的路徑本項目推薦使用的方式使用JDBC-ODBC進行橋連-----本項目推薦使用的方式使用JDBC-ODBC進行橋連------語法------publicstaticfinalStringDBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";publicstaticStringDBURL="jdbc:odbc:Driver={MicrosoftAccessDriver(*.mdb)};DBQ=";publicstaticfinalStringDBUSER="";publicstaticfinalStringDBPASS="";Class.forName(DBDRIVER);conn=DriverManager.getConnection(URL,DBUSER,DBPASS);Stringdbpath=application.getRealPath("\\Database\\Database.mdb");StringURL=DBURL+dbpath;DBURL+真實的路徑本項目推薦使用的方式使用JDBC-ODBC進行橋連-----JDBC驅(qū)動連接數(shù)據(jù)庫純Java驅(qū)動由JDBC驅(qū)動直接訪問數(shù)據(jù)庫優(yōu)點:100%Java,快又可跨平臺缺點:訪問不同的數(shù)據(jù)庫需要下載專用的JDBC驅(qū)動JDBC
驅(qū)動Java應(yīng)用程序JDBCAPIDBServerJDBC驅(qū)動連接數(shù)據(jù)庫純Java驅(qū)動JDBC驅(qū)動JavJDBC驅(qū)動連接數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包2、將驅(qū)動程序包引入工程中3、編程,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接4、基本書寫格式與JDBC-ODBC方式完全一致------語法------publicstaticfinalStringDBDRIVER=“………….";publicstaticfinalStringDBURL=“………………..”publicstaticfinalStringDBUSER=“………………";publicstaticfinalStringDBPASS=“………………...";Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);JDBC驅(qū)動連接數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連---JDBC驅(qū)動連接Oracle數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包ojdbc12.jar2、將驅(qū)動程序包引入工程中3、編程,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接------語法------publicstaticfinalStringDBDRIVER=“oracle.jdbc.driver.OracleDriver";publicstaticfinalStringDBURL=“jdbc:oracle:thin:@localhost:1521:huyp”;publicstaticfinalStringDBUSER=“數(shù)據(jù)庫登錄用戶名(默認scott)";publicstaticfinalStringDBPASS=“數(shù)據(jù)庫登錄用戶密碼(默認tiger)";Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);IP端口號用戶名JDBC驅(qū)動連接Oracle數(shù)據(jù)庫使用純Java驅(qū)動方式進JDBC驅(qū)動連接MYSQL數(shù)據(jù)庫使用純Java驅(qū)動方式進行直連1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包mysql-connector-java-5.1.7-bin.jar2、將驅(qū)動程序包引入工程中3、編程,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接------語法------publicstaticfinalStringDBDRIVER=“com.mysql.jdbc.Driver
";publicstaticfinalStringDBURL=“jdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱”;publicstaticfinalStringDBUSER=“數(shù)據(jù)庫登錄用戶名";publicstaticfinalStringDBPASS=“數(shù)據(jù)庫登錄用戶密碼";Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);JDBC驅(qū)動連接MYSQL數(shù)據(jù)庫使用純Java驅(qū)動方式進行六步使用JDBC加載JDBCDriver獲取與數(shù)據(jù)庫Connection創(chuàng)建PreparedStatement對象執(zhí)行SQL語句處理ResultSet(針對查詢語句)關(guān)閉Connection六步使用JDBC加載JDBCDriverJDBC程序編寫過程JDBC程序編寫過程JDBC程序的工作模板try{
Class.forName(JDBC驅(qū)動類);}catch(ClassNotFoundExceptione){System.out.println("無法找到驅(qū)動類");}try{Connectioncon=DriverManager.getConnection(JDBCURL,數(shù)據(jù)庫用戶名,密碼);
Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable1");
while(rs.next()){intx=rs.getInt("a");Strings=rs.getString("b");floatf=rs.getFloat("c");}
con.close();}catch(SQLExceptione){e.printStackTrace();}獲得數(shù)據(jù)庫連接發(fā)送Sql語句處理結(jié)果注冊JDBC驅(qū)動JDBCURL用來標識數(shù)據(jù)庫必須處理的異常釋放資源必須處理的異常JDBC程序的工作模板try{獲得數(shù)據(jù)庫連接發(fā)送Sql語句1)加載JDBCDriver使用DriverManager
類加載JDBCDriverDriverManager
類是
JDBC
的管理層,作用于用戶和驅(qū)動程序之間,它跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接.加載
Driver
類的方式:
Class.forName(“com.db.Driver");
所有
Driver
類都包含一個靜態(tài)部分,它創(chuàng)建該類的實例,然后在加載該實例時在DriverManager類中進行注冊DriverManager
類包含一列
Driver
類,它們已通過調(diào)用方法DriverManager.registerDriver對自己進行了注冊1)加載JDBCDriver使用DriverManageTestJDBC1.javaMain:try{//1Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundExceptione){e.printStackTrace();//若驅(qū)動沒找到,則怎么辦}TestJDBC1.javaMain:TestJDBC1.javaMain:Connectionconn=null;//2Stringurl="jdbc:sqlserver://:1433;databasename=test";conn=DriverManager.getConnection(url,"root","");TestJDBC1.javaMain:3)創(chuàng)建Statement對象Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。存在三種Statement對象:StatementPreparedStatement(從Statement繼承而來)CallableStatement(從PreparedStatement繼承而來)Statement對象由Connection的createStatement()方法創(chuàng)建:3)創(chuàng)建Statement對象Statement對象用于將TestJDBC1.javaMain://3Statementst=conn.createStatement();TestJDBC1.javaMain:4)執(zhí)行SQL語句Statement接口的常用方法:用于產(chǎn)生單個結(jié)果集的語句,例如SELECT語句。publicResultSetexecuteQuery(Stringsql)throwsSQLException用于執(zhí)行INSERT,UPDATE或DELETE語句以及SQLDDL語句,例如CREATETABLE和DROPTABLE。該方法返回一個整數(shù),指示受影響的行數(shù)。對于CREATETABLE或DROPTABLE等不操作行的語句,返回值總為零。publicintexecuteUpdate(Stringsql)throwsSQLException關(guān)閉Statement對象publicvoidclose()throwsSQLException4)執(zhí)行SQL語句Statement接口的常用方法:TestJDBC1.javaMain://4Stringsql="select*fromloginuser";ResultSetrs=st.executeQuery(sql);//或者執(zhí)行更新,刪除,插入數(shù)據(jù)Stringsql=“insertintoemailuservalues(‘a(chǎn)aa’,’ccc’)";introw=st.executeUpdate(sql);TestJDBC1.javaMain:5)處理返回結(jié)果(ResultSet)ResultSet包含符合SQL語句條件的所有行,并且它通過一套getXxx()方法提供了對這些行中數(shù)據(jù)的訪問。取得當前行中第columnIndex列的整數(shù)的值。intgetInt(intcolumnIndex)取得當前行中列名為columnName的整數(shù)的值。intgetInt(StringcolumnName)取得當前行中第columnIndex列的字符串的值。StringgetString(intcolumnIndex)取得當前行中列名為columnName的字符串的值。StringgetString(StringcolumnName)5)處理返回結(jié)果(ResultSet)ResultSet包含ResultSet接口其他常用方法ResultSet維護指向其當前數(shù)據(jù)行的光標,光標向下移動一行的方法:booleannext()關(guān)閉ResultSet對象voidclose()ResultSet接口其他常用方法ResultSet維護指向TestJDBC1.javaMain://5while(rs.next()){System.out.println(rs.getInt(1)+"---"+rs.getString("username")+"---"+rs.getString("userpass"));}TestJDBC1.javaMain:6)關(guān)閉連接按照創(chuàng)建對象相反的順序關(guān)閉連接rs.close();//若是更新就沒有這一步st.close();conn.close();6)關(guān)閉連接按照創(chuàng)建對象相反的順序關(guān)閉連接使用Statement插入數(shù)據(jù)2-1——代碼片斷——publicstaticvoidmain(String[]args){Connectioncon=null;Statementst=null;try{StringstrSql="insertintoemailuservalues('軍事','網(wǎng)管')";try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundExceptione){System.out.println("無法找到驅(qū)動類");}con=DriverManager.getConnection("jdbc:sqlserver://:1433;database=test","sa",“602");st=con.createStatement();st.executeUpdate(strSql);st.close();}catch(SQLExceptionsqlE){sqlE.printStackTrace();}finally{con.close();}}建立連接執(zhí)行sql語句數(shù)據(jù)庫連接使用完畢,及時釋放載入JDBC驅(qū)動類異常處理異常處理使用Statement插入數(shù)據(jù)2-1——代碼片斷——建立連綜合案例在servlet中演示第一步:注冊頁面(register.jsp)RegisterServlet
實現(xiàn)插入值的操作第二步:
查看所有用戶信息。通過超鏈接---SearchAllServlet
實現(xiàn)查詢功能
綜合案例在servlet中演示案例小結(jié)發(fā)現(xiàn)一些問題:
1:動態(tài)參數(shù)的處理statement較麻煩
2:連接數(shù)據(jù)庫的代碼類似,重復(fù)了。
3:想把結(jié)果返回到頁面太麻煩。
------不能到指定頁面;
------使用out.print(),構(gòu)建頁面太復(fù)雜
案例小結(jié)發(fā)現(xiàn)一些問題:小結(jié)2在使用純Java驅(qū)動方式進行數(shù)據(jù)庫連接時,如果程序在運行時拋出異常:
java.sql.SQLException:Nosuitabledriverfoundforjdbc:microsoft:sqlserver://localhost:1433;DatabaseName=news
那么出錯的原因是什么?如何解決?請單獨建立一個類ConnectionManager,專門負責(zé)建立數(shù)據(jù)庫連接、以及關(guān)閉連接,并思考這樣做帶來的好處是什么找不到合適的驅(qū)動類,原因:沒有把數(shù)據(jù)庫驅(qū)動包引入工程好處在于:既便于管理、又可以提高代碼的復(fù)用性完整代碼實現(xiàn)小結(jié)2在使用純Java驅(qū)動方式進行數(shù)據(jù)庫連接時,如果程序在PreparedStatementPreparedStatement接口(預(yù)編譯的SQL語句)Statement接口當
SQL
語句將運行多次時,盡量使用PreparedStatement,以便提高運行效率當sql語句中的某個值不固定時,使用PreparedStatementPreparedStatement接口繼承Statement接口PreparedStatement比普通的Statement對象使用起來更加靈活,更有效率PreparedStatementpst=conn.preparedStatement(sql);PreparedStatementPreparedStatPreparedStatementSql的寫法---不固定的值用“?”代替例如insertintoemailuser(name,pass)values(?,?)select*fromemailuserwhereuserid=?為“?”設(shè)置值
pst.setInt(序號,值);------序號指的是sql中第幾個”?”號
pst.setString(序號,值);
pst.setDate(序號,值);常用
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路交叉口設(shè)計優(yōu)化技術(shù)方案
- 2026年及未來5年市場數(shù)據(jù)中國電子錢包行業(yè)發(fā)展前景預(yù)測及投資戰(zhàn)略咨詢報告
- 消防設(shè)施備件管理方案
- 2026年及未來5年市場數(shù)據(jù)中國醫(yī)學(xué)檢驗耗材行業(yè)發(fā)展前景預(yù)測及投資方向研究報告
- 2026年及未來5年市場數(shù)據(jù)中國茗茶行業(yè)發(fā)展監(jiān)測及投資策略研究報告
- 水電站防洪排澇技術(shù)方案
- 人防工程環(huán)境監(jiān)測技術(shù)方案
- 工程量清單編制與審核方案
- 外墻涂裝施工流程方案
- 信息技術(shù)應(yīng)用合作協(xié)議方案
- 粉塵職業(yè)病(塵肺病、皮膚病)危害應(yīng)急預(yù)案
- 2026年江蘇蘇北四市高三一模高考英語試卷試題(答案詳解)
- 實驗室安全培訓(xùn)P53
- 2026年安徽省江淮糧倉融資擔(dān)保有限公司(籌)招聘考試參考試題及答案解析
- 廣東省廣州市海珠區(qū)2026年九年級上學(xué)期期末物理試題附答案
- 2026中好建造(安徽)科技有限公司招聘45人筆試備考試題及答案解析
- 2025年輔警面試考試復(fù)習(xí)題庫目及解析答案
- 北師大版三年級數(shù)學(xué)(上)期末家長會-三載深耕學(xué)有所成【課件】
- 風(fēng)機安全鏈課件
- 2025年企業(yè)設(shè)備故障處理手冊
- 維修班組安全培訓(xùn)課件
評論
0/150
提交評論