下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
17Java為客戶端和服務(wù)器端兩個(gè)部分。Java的設(shè)計(jì)意圖是將它用于服務(wù)器端,而將客戶端交給其JavaDelphi、VB的一個(gè)重要區(qū)別是,它不提供可視化的數(shù)據(jù)庫(kù)感應(yīng)控件,因而編寫客戶端時(shí)如果采用Java作為開發(fā)工具會(huì)有比較多的編程Java無(wú)論何種工具,要處理數(shù)據(jù)庫(kù)必須做的第一件事情就是對(duì)數(shù)據(jù)進(jìn)行連接。Java提供了多種連接方式,這都是通過(guò)JDBC來(lái)進(jìn)行的。本節(jié)將介紹JDBC的使用。JDBCJava數(shù)據(jù)庫(kù)連接(JavaDatabaseConnectivity)的簡(jiǎn)寫,是一組用于連接數(shù)據(jù)庫(kù)以及執(zhí)行SQL語(yǔ)句的API。它允許用戶從JAVA程序中任何支持SQL的關(guān)系型數(shù)據(jù)庫(kù),也允許用戶其他的表格數(shù)據(jù)源,如Excel表格。JDBC最大的特點(diǎn)是無(wú)論是何種數(shù)據(jù)庫(kù),對(duì)于Java程序員而言,它的工作方式完全相同。JDBC為許多不同的數(shù)據(jù)庫(kù)連接模塊的前端提供了統(tǒng)一的接口,這樣就不用為連DriverManager類建立與數(shù)據(jù)源的連接,這個(gè)連接將作為一個(gè)數(shù)據(jù)操作的起點(diǎn),用類中相應(yīng)的excute方法來(lái)執(zhí)行SQL命令。ResultSet結(jié)果集,程序接著遍歷這個(gè)源的驅(qū)動(dòng)程序。JDBC有四種連接方部分JavaJDBC-Net純Java驅(qū)動(dòng)方式和本地協(xié)議純Java驅(qū)動(dòng)方JDBC-ODBC橋加上ODBCODBCWindows平臺(tái)上使用最廣泛的標(biāo)準(zhǔn)連接驅(qū)動(dòng)。所有能在Windows上運(yùn)行的數(shù)據(jù)庫(kù)系統(tǒng)都提供何在本地機(jī)器上配置ODBC數(shù)據(jù):果是WindowsXP,該圖標(biāo)在“管理17.1所示的窗口。(DSN數(shù)據(jù)源的類型。這里Access。JDBC要通過(guò)它來(lái)連接數(shù)據(jù)庫(kù)文件。單擊圖
17.1ODBC17.217.3這里將數(shù)據(jù)源的名稱命名為“otudy”,請(qǐng)記住該名稱,后面編程要用到。然后單第16的ple.bAPI與數(shù)據(jù)源系統(tǒng)通JavaAPI留在客戶層上并直接與數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行 圖17.4本地API連接方JDBC-ODBC更快,但它InternetJavaNativeInterfaceJVM的JDBC-Net純Java驅(qū)動(dòng)程這種連接方式的驅(qū)動(dòng)程序采用一種三層化方法,JDBC數(shù)據(jù)庫(kù)請(qǐng)求憑借這種方法,被用Java編寫成的,它可以使用前面介紹的兩種類型的JDBC驅(qū)動(dòng)程序來(lái)完成這些工作,這17.5JDBC-NetJDBC驅(qū)動(dòng)程序(KB)在客戶機(jī)上執(zhí)行,并通過(guò)網(wǎng)絡(luò)把SQL命令傳遞給JDBC服務(wù)器,然后接收來(lái)自服務(wù)器的數(shù)據(jù),并管理連接。這種方式考慮到了在Internet上的部署。這種方式的優(yōu)點(diǎn)是顯而易見(jiàn)的:大多數(shù)的三層Web應(yīng)用程序都涉及到安全、以及,而這類驅(qū)動(dòng)程序一JavaJava程序,不需要和安全性。不過(guò),當(dāng)數(shù)據(jù)庫(kù)變成一個(gè)不同開發(fā)商產(chǎn)品時(shí)(盡管這種情形很少見(jiàn),但不能完全排除),不能使用同一個(gè)JDBC驅(qū)動(dòng)程序,需要替換該驅(qū)動(dòng)程序。JDBCDBMSJava驅(qū)動(dòng)程序。這些驅(qū)動(dòng)程個(gè)連接方式如圖17.6所示。17.6這種方式的缺點(diǎn)在于,程序員需要給每個(gè)數(shù)據(jù)庫(kù)使用不同的JDBC驅(qū)動(dòng)程序。相對(duì)而言,在Windows平臺(tái)上使用第式較多,在Linux/Unix平臺(tái)上使用第四為解決這一問(wèn)題,JDBC使用了“連接池”的概念。在連接池中,保存了若干已經(jīng)建替原有通過(guò)DriverManager類來(lái)獲得數(shù)據(jù)庫(kù)連接的方式。一javax.sql.DataSource接口的ContextContextctx=newDataSourceds=(DataSource)應(yīng)的Connection對(duì)象。而如果當(dāng)前的DataSource對(duì)象支持?jǐn)?shù)據(jù)庫(kù)連接池,應(yīng)用程序?qū)⒆詣?dòng)行數(shù)據(jù)的操作,完成操作后應(yīng)顯式地調(diào)用close()關(guān)閉數(shù)據(jù)庫(kù)連接。持連接池的實(shí)現(xiàn),而連接池的具體實(shí)現(xiàn),JDBC3.0規(guī)范并沒(méi)有做相關(guān)的規(guī)定。通過(guò)這個(gè)框JDBC3.0JDBCDriver級(jí)和ApplicationServerJDBCDriver級(jí)的實(shí)現(xiàn)中,任何相關(guān)的工作均由特定數(shù)據(jù)庫(kù)廠商JDBCDriverJDBCDriver既需要提供對(duì)數(shù)據(jù)庫(kù)連接池的支ApplicationServer級(jí)中數(shù)據(jù)庫(kù)連接池JDBCDriverApplicationServer開發(fā)人員,共同實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)(ApplicationServer廠商實(shí)現(xiàn)的連接池的機(jī)制和規(guī)范中提到有差異)JDBCDriver提供數(shù)據(jù)庫(kù)連接池的支持,而特定的ApplicationServer廠商提供數(shù)據(jù)庫(kù)連接池的具體實(shí)現(xiàn)。消,這種取消動(dòng)作被稱為“回滾(rollback)”。JDBC中的事務(wù)操作是基于同一個(gè)數(shù)據(jù)連方法,都位于接口java.sql.Connection中。在JDBC中,事務(wù)操作默認(rèn)是自動(dòng)提交。也就是說(shuō),一條對(duì)數(shù)據(jù)庫(kù)的更新表達(dá)式代表 數(shù)據(jù)庫(kù)操作的表達(dá)式作為一個(gè)事務(wù),在操作完成后調(diào)用commit()來(lái)進(jìn)行整體提交,倘若其中一個(gè)表達(dá)式操作失敗,都不會(huì)執(zhí)行到commit(),并且將產(chǎn)生相應(yīng)的異常。此時(shí),就可以trytryconn=stmt=conn.createStatement();自動(dòng)提交,設(shè)置回//數(shù)據(jù)庫(kù)更新操作}catch(Exceptiontry{}catch(Exception{}//事務(wù)//操作不成功則JDBCAPI5種操作支持,2種加鎖密度。5種staticintTRANSACTION_NONE:事務(wù)操作和加鎖staticintTRAN 重復(fù)讀寫(repeatablereads)和影象讀寫(phantomreads)staticintTR staticintTRANSACTION_SERIALIZABLE:臟數(shù)據(jù)讀寫、重復(fù)讀寫和允許影臟數(shù)據(jù)讀寫(dirtyreads):當(dāng)一個(gè)事務(wù)修改了某一數(shù)據(jù)行的值而未提交時(shí),另一(臟數(shù)據(jù))重復(fù)讀寫(repeatablereads):當(dāng)一個(gè)事務(wù)在某一數(shù)據(jù)行時(shí),另一事務(wù)同時(shí)在JDBC根據(jù)數(shù)據(jù)庫(kù)提供的默認(rèn)值來(lái)設(shè)置事務(wù)支持及其加鎖,它有兩種加鎖密度:分別Settransactionisolation(int 注意:某些數(shù)據(jù)庫(kù)(如oracle)中,數(shù)據(jù)庫(kù)驅(qū)動(dòng)對(duì)事務(wù)處理的默認(rèn)值是TRANSACTION_來(lái)說(shuō),對(duì)于只涉及到數(shù)據(jù)庫(kù)的查詢操作時(shí),可以采用TRANSACTION_READ_MITTED方式;對(duì)于數(shù)據(jù)查詢遠(yuǎn)多于更新的操作,可以采用TRANSACTION_ 方式;對(duì)于更新操作較多的,可以采用TRANSACTION_REPEATABLE_READ;在數(shù)據(jù)一致性要求更高的場(chǎng)合再考慮最后一項(xiàng),由于涉及到表Java5種基本操作:增、刪、改、查找和排序。在Java中,這些操作都是通過(guò)SQL語(yǔ)言來(lái)實(shí)現(xiàn)的。DriverManager 正如名稱所示,該方法將建立與數(shù)據(jù)庫(kù)的連接。JDBC允許用戶調(diào)用DriverManagergetDriver()、getDrivers()registerDriver()。但多數(shù)情況下,DriverManager類自己Connection封裝了對(duì)數(shù)據(jù)庫(kù)連接的操作。一般情況下,Connetction對(duì)象是由DriverManager.getConn-ection()方法來(lái)得到的,程序只需要獲取該方法返回的一個(gè)指向Connection對(duì)象的,就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。Connection的方法比較多,但多數(shù)情況下,程序員只需要用到下體的SQL命令。Statement方法來(lái)執(zhí)行SQL命令:ResultSetexecuteQuery(Stringsql)sql命令,返回一個(gè)結(jié)果集合。通常用于執(zhí)行SELECT命令。于執(zhí)行INSERT、UPDATE或DELETE命令。表示返回了一個(gè)結(jié)果集,需要用getResultSet()方法獲取這個(gè)結(jié)果集,也可以使用getMoreResults()獲取子結(jié)果集。如果為false,表示沒(méi)有結(jié)果集,只需要調(diào)用PreparedStatementStatement類似SQL命令進(jìn)行預(yù)編譯,對(duì)于需要多次執(zhí)行SQL語(yǔ)句而言,量轉(zhuǎn)換成為SQL語(yǔ)句中的變量,并降低出錯(cuò)的可能性。它用來(lái)接受SQL語(yǔ)句執(zhí)行后的結(jié)果,程序員可以通過(guò)next()、previous()等方法來(lái)關(guān)于這個(gè)接口,將在17.2.7中詳細(xì)介紹。try-catch語(yǔ)句塊中。注意,這里是加載ODBC驅(qū)動(dòng),無(wú)論是何種數(shù)據(jù)庫(kù),該驅(qū)動(dòng)程序動(dòng)程序。例如,是MySQL,加載驅(qū)動(dòng)程序的代碼是:java.sqlConnection類來(lái)聲staticstaticConnectiongetConnection(Stringurl,Stringuser,Stringjdbc:odbc:jdbc:odbc:數(shù)據(jù)源注意:這里是數(shù)據(jù)源而非數(shù)據(jù)庫(kù)名令均為空。這就是第16章建立的數(shù)據(jù)庫(kù),以及17.1節(jié)配置的ODBC數(shù)據(jù)源。//-----------連接數(shù)據(jù)庫(kù)示例程序段,程序編 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加載數(shù)據(jù)庫(kù)ConnectionConnection("jdbc:odbc:forStudy","","");//這里是ODBC}catch(ClassNotFoundException}種異常情況,程序就不會(huì)按照正常流程運(yùn)行,就可close()方法沒(méi)有被調(diào)用的情況,//-----------關(guān)閉數(shù)據(jù)庫(kù)示例程序段,程序編 Connection}catch(ClassNotFoundExceptioncon.close();//el){}//endtry-}//end}//endtry-catch-SQLStatementexecuteUpdate()方法就可】room、6個(gè)字段(如果您的數(shù)據(jù)庫(kù)中該表的字段不是這個(gè)樣子,請(qǐng)將其設(shè)置成這樣6個(gè)字 //-----------程序名insertData.java,程序編號(hào)17.3publicclassinsertDatapublicstaticvoidmain(String[]{Connectioncon=null;Statementstmt;//要執(zhí)行的SQL語(yǔ)StringsqlString="insertintostudentvalues('30小王','男'湖南湘潭','N- //連接數(shù)//執(zhí)行插入e){e){}}}}錯(cuò)的事。例變量:code="30",name="小王",sex="男",address="湖南湘潭", sqlString="insertsqlString="insertintostudentvalues('code','name','sex','address', sqlString="insertsqlString="insertintostudentvalues('"+code+"','"+name+"','"+sex+"','"+address+"','"+room+"','"+ +"',)";//-----------程序名insertData.java,程序編號(hào)17.4importjava.io.*;publicclassinsertDatapublicstaticvoidmain(String[]{Connectioncon=null;Statementstmt;Stringname,sex,address,code,room, //拼裝SQLsqlString="insertintostudentvalues('"+code+"','"+name++sex+"','"+address+"','"+room+"','"+e){e){}}}publicstaticStringgetInput(Stringmsg){Stringresult=null;BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));e){}return}}17.717.4SQL命令可以使用的字符串是件很sqlString="insertintostudentvalues(?,?,?,?)";//?就是占位
//替換第一個(gè)占位//替換第四個(gè)占位等來(lái)賦值。整個(gè)程序如程序17.5所示://-----------程序名insertData.java,程序編號(hào)17.5importjava.io.*;publicclassinsertDatapublicstaticvoidmain(String[]{Connectioncon=null;PreparedStatementps;StringsqlString;Stringname,sex,address,code,room, sqlString="insertsqlString="insertintostudentvalues(?,?,?,?,?,?)";ps.setString(1,code);//替換第一個(gè)占位符 ps.executeUpdate()SQL命令e){e){}}}publicstaticStringgetInput(Stringmsg){Stringresult=null;BufferedReaderin=newBufferedReader(newInputStreamReadere){}return}}SQLdelete即可。delete命令本身比較JavaSQL命令字符串之間的差異。下面是一個(gè)簡(jiǎn)//-----------程序名deleteData.java,程序編號(hào)17.6importjava.io.*;publicclassdeleteDatapublicstaticvoidmain(String[]{ConnectionStatementStatementStringsqlString="deletefromstudentwherecode='"+code+"'";//e){e){}}}publicstaticStringgetInput(Stringmsg){Stringresult=null;BufferedReaderin=newBufferedReader(newInputStreamReadere){}return}}//-----------程序名updateData.java,程序編號(hào)17.7importjava.io.*;publicclassupdateDatapublicstaticvoidmain(String[]{ConnectionStatementstmt;Statementstmt;intk;sqlString="updatestudentsetsex='女wheresex='男'";//執(zhí)行SQLe){e){}}}}SELECTResultSet集中,遍歷這個(gè)集此ResultSet提供了大量的方法供程序員來(lái)管理這根游標(biāo)。ResultSet的方法非常多,表17.1列出了其中一些常用的方17.1ResultSet booleanabsolute(int將游標(biāo)移動(dòng)到指定行位置(絕對(duì)值voidvoidvoidvoidvoid立即關(guān)閉與結(jié)果集連接的數(shù)據(jù)庫(kù)并釋放JDBCvoidintfindColumn(Stringboolean BigDecimalgetBigDecimal(intbooleangetBoolean(intbytegetByte(intStringdoublegetDouble(intintgetInt(intlonggetLong(intintshortgetShort(String成為short數(shù)據(jù)Statement返回與結(jié)果集相關(guān)聯(lián)的Statement對(duì)StringgetString(int成為Stringintvoidbooleanbooleanbooleanbooleanbooleanvoidvoidbooleanbooleanvoidbooleanrelative(int將游標(biāo)移動(dòng)到相對(duì)于當(dāng)前位置差rows行的booleanbooleanbooleanvoidupdateByte(intcolumnIndex,byte voidupdateDate(intcolumnIndex,DatevoidupdateDouble(intcolumnIndex,doublevoidupdateInt(intcolumnIndex,intvoidupdaong(intcolumnIndex,longvoidvoidupdateShort(StringcolumnName,shortboolean測(cè)試讀入進(jìn)來(lái)的最后一列是否為SQLNULL//-----------程序名queryData.java,程序編號(hào)17.8importjava.sql.importjava.sql.*;importjava.io.*;publicclassqueryData{publicstaticvoidmain(String[]{Connectioncon=null;Statementstmt;ResultSetrs;//執(zhí)行查詢命令,并獲取返回rs=stmt.executeQuery("select*fromname=rs.getString("name");//獲取name字段的內(nèi)容 //獲取sex字段的內(nèi)容System.out.println(name+""+sex+""+address+"}e){e){}}//try}//method}//classJavaGUI界面的數(shù)據(jù)庫(kù)17.8這里用到的數(shù)據(jù)庫(kù)仍然是前面的FirstExample,ODBC數(shù)據(jù)源名稱為forStudy,表名是student,擁6個(gè)字段,如17.2所示:17.2student類長(zhǎng)含學(xué)生代碼(學(xué)號(hào)是否2否否否否注意:某些數(shù)據(jù)庫(kù)不支持?jǐn)?shù)據(jù)集的這些功能,只能用相應(yīng)的SQL 一般情況下,這種MIS程序有三種編程思路:也可以刪除記錄。這需要精確記錄游標(biāo)的位置和記錄條數(shù)。ResultSet對(duì)這兩項(xiàng)的支持都很protectedprotectedint//publicstaticfinalintonlyRead=0,adding=1,amending=2;//protectedint //記錄ResutlSet不能直接獲取記錄總數(shù),需要使用SQLselectcount(*)from t的值首先來(lái)設(shè)計(jì)程序的界面,這個(gè)比較簡(jiǎn)單,用第14章介紹的知識(shí)就可以輕松完成,只//-----------程序名AddressList.java,程序編號(hào)17.9importjavax.swing.importjavax.swing.*;importjava.awt.*;importjava.sql.*;publicclassAddressListextends Containercon; Connectionconn=null;Statementstmt=null;ResultSetrs=null;protectedintrecordState=onlyRead, publicstaticfinalintonlyRead=0,adding=1,amending=2;publicstaticfinalStringlb privatestaticfinal publicAddressListmainJframenewJFrame("學(xué)生信息管理con.setLayout(newBoxLayout(con,BoxLayout.Y_AXIS));pane=newJPanel[4];for(inti=0;i++){pane[i]=newJPanel();}fieldText=newJTextField[ lbl=newJLabel[ for(inti=0; i++){fieldText[i]=newJTextField();lbl[i]=newJLabel(); }firstBtn=newJButton("第一條");preBtn=newJButton("前一條");nextBtn=newJButton("后一條");lastBtn=newJButton("最后一條");addBtn=newJButton("增加記錄");editBtn=newJButton("編輯記錄");delBtn=newJButton("刪除記錄");cancelBtn=newJButton("取消改變");saveBtn=newJButton("保存記錄");for(inti=0;i<4;i++)if( t>0)showDate();}protectedvoidsetFace(){}publicstaticvoidmain(String[]{new}}其中的connection()和showDate()方法將在后面介紹。這里實(shí)際上已經(jīng)提供了本程序的框架,后面的代碼都要添加在AddressList.java文件中。注意:某些數(shù)據(jù)庫(kù)不支持這些功能用兩條SQL語(yǔ)句來(lái)完成。打開數(shù)據(jù)庫(kù)寫成一個(gè)方法,代碼如下:publicvoidconnection(){publicvoidconnection(){try{rs=stmt.executeQuery("selectcount(*)fromstudent");t=rs.getInt(1);//rs=stmt.executeQuery("selectcode,name,sex,address,room,fromstudent"); //將游標(biāo)移動(dòng)到第一條記JOptionPane.showMessageDialog(mainJframe,"數(shù)據(jù)庫(kù)無(wú)法連接或沒(méi)有記錄{}}以需要將關(guān)閉數(shù)據(jù)庫(kù)的代碼寫在windowClosing事件的響應(yīng)代碼中。程序如下:////退出系統(tǒng)時(shí)要關(guān)閉數(shù)publicvoidwindowClosing(WindowEventel){try{e){}}publicvoidshowDate(){ }為了編程上的方便,需要將幾個(gè)按鈕都要用到的功能寫成下面兩個(gè)方法供其他方法調(diào)用:////設(shè)置文本框的讀寫protectedvoidsetTextState(booleanflag){for(inti=0;i< }protectedvoidfor(inti=0;i< }protectedprotectedvoidfalse);returnreturn}if(rs.first()){//移動(dòng)游標(biāo)到第一條位置showDate()顯示當(dāng)前記錄到界面上curRow=1;//記錄游標(biāo)的新位置}}protectedprotectedvoidif(curRow<=1){ return} //向前移動(dòng) /
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年適用:互聯(lián)網(wǎng)金融服務(wù)平臺(tái)建設(shè)與運(yùn)營(yíng)合同
- 二零二五年度SET協(xié)議在移動(dòng)電子商務(wù)領(lǐng)域的應(yīng)用合同2篇
- 二零二五年度“海南鮮品”品牌員工培訓(xùn)與發(fā)展合作協(xié)議2篇
- 2024年給水設(shè)施施工合作合同樣本版B版
- 2024宅基地轉(zhuǎn)讓與土地征收安置補(bǔ)償協(xié)議范本3篇
- 2024年簡(jiǎn)化版第三方擔(dān)保協(xié)議樣式版B版
- 2025年度社區(qū)巴士承包運(yùn)營(yíng)服務(wù)合同模板3篇
- 2024年跨境運(yùn)輸合同規(guī)范文本匯編2篇
- 2024年度代理記賬服務(wù)與文化創(chuàng)意企業(yè)合作協(xié)議書2篇
- 2025版車輛無(wú)償試駕體驗(yàn)合同范本3篇
- 建筑施工安全風(fēng)險(xiǎn)辨識(shí)分級(jí)管控指南494條-副本
- 橙子主題課程設(shè)計(jì)
- 英語(yǔ)應(yīng)用文寫作智慧樹知到答案2024年湖北大學(xué)
- 靜脈留置針?biāo)蚂o脈炎的標(biāo)準(zhǔn)化護(hù)理預(yù)防流程
- 廣西百色市縣級(jí)市2023-2024學(xué)年八年級(jí)上學(xué)期期末檢測(cè)物理試題(原卷版)
- 人教版2024年新教材七年級(jí)上冊(cè)英語(yǔ)各單元考點(diǎn)復(fù)習(xí)提綱
- 人教版地理八年級(jí)上冊(cè)第三節(jié)《民族》教學(xué)設(shè)計(jì)4
- 第八章《運(yùn)動(dòng)和力》大單元教學(xué)設(shè)計(jì) -2023-2024學(xué)年人教版物理八年級(jí)下學(xué)期
- 12D401-3 爆炸危險(xiǎn)環(huán)境電氣線路和電氣設(shè)備安裝
- 黑龍江省2024年醫(yī)學(xué)專升本考試真題
- DL∕T 796-2012 風(fēng)力發(fā)電場(chǎng)安全規(guī)程
評(píng)論
0/150
提交評(píng)論