




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块7 Java数据库编程,教学目标,JDBC技术 JDBC的体系结构 JDBC驱动程序类型 JDBC API的主要类和接口简介 创建SQL Server服务器上的数据库 SQL Server的组件简单介绍 创建用户数据库student和ODBC数据源 创建ODBC数据源 Java应用程序通过JDBC存取数据库的过程 应用JDBC存取数据库的步骤 JDBC存取SQL Server数据库的简单实例,教学目标(续),JDBC中的主要接口和类 DriverManager类 Connection接口 Statement接口 PreparedStatement接口 CallableStatement 接口 Java数据类型和SQL中支持的数据类型的对应关系 ResultSet接口 ResultSetMetaData接口 DatabaseMetaData接口 数据库开发应用实例 student数据库的插入、修改、删除记录的程序设计 查询student数据库的程序设计,7.1 JDBC技术,Java程序使用JDBC(Java Database Connectivity,Java数据库连接)API与数据库进行通信,并用它操纵数据库中的数据。这种API与特定数据库的驱动程序相分离,使开发人员能够改变底层的数据库,而不必修改访问数据库的Java代码。,7.1.1 JDBC的体系结构,图13-1 JDBC的体系结构,7.1.2 JDBC驱动程序类型,1JDBC-ODBC bridge plus ODBC driver(类型1):JDBC-ODBC桥接驱动程序。其底层通过ODBC(Open databas Connectivity)驱动程序来连接数据库。 2 Native-API partly-Java driver(类型2):本地 API - 部份用 Java 来编写的驱动程序。此种方式先将JDBC函数调用转换成数据库客户端函数库的API(位于客户端计算机),然后与数据库相连。 3JDBC-Net pure Java driver(类型3):JDBC 网络纯 Java 驱动程序。首先JDBC驱动程序会将JDBC函数调用解释成与数据库无关的网络通信协议,经过中介服务器的第二次解析,最后才转换成相对应的数据库通信协议. 4、Native-protocol pure Java driver(类型4) 本地协议纯 Java驱动程序。这种驱动程序将 JDBC 调用直接转换为 DBMS 所使用的网络协议。,7.1.3 JDBC API的主要类和接口简介,JDBC API由一系列与数据库访问有关的类和接口组成,它们放在java.sql子包中。其中主要的类和接口有: DriverManager类: Connection接口 Statement接口 PreparedStatement与CallableStatement; ResultSet; CallableStatement接口,7. 创建SQL Server服务器上的数据库,SQL Server 2000数据库逐渐成为Windows操作系统平台下进行数据库应用开发中较为理想的选择之一,它可作为大型Web站点、企业OLTP(联机事务处理)以及数据仓库系统等的产品数据库服务器。,7.2.1 SQL Server的组件简单介绍,SQL Server 2000 提供了一整套的管理工具和实用程序,使用这些工具和程序,可以设置和管理SQL Server 进行数据库管理和备份,并保证数据的安全和一致。 1 企业管理器(Enterprise Manager) 企业管理器是SQL Server 中最重要的管理工具,在使用SQL Server的过程中大部分的时间都是和它打交道。通过企业管理器可以管理所有的数据库系统工作和服务器工作。详细说明请参考SQL SERVER 2000技术手册。 2 查询分析器(Query Analyzer) 查询分析器用于执行Transaction-SQL 命令等SQL 脚本程序,以查询分析或处理数据库中的数据,这是一个非常实用的工具,对掌握SQL 语言、理解SQL Server 的工作有很大帮助。,企业管理器主界面,查询分析器的界面,7.2.1 SQL Server的组件简单介绍(续),3. 服务管理器(Service Manager) 服务管理器用于启动、暂停或停止SQL Server。 4 客户端网络实用工具(Client Network Utility) 客户端网络实用工具用于配置客户端的连接、测定网络库的版本信息以及设定本地数据库的相关选项。 5 服务器网络实用工具(Server Network Utility) 服务器网络实用工具用于配置服务器端的连接、测定网络库的版本信息。 6 导入和导出数据(Import and Export Data) 导入和导出数据采用 DTS Import/Export 向导来完成,此向导包含了所有的DTS(Data Transformation Services 数据转换服务)工具,提供了在OLE DB数据源之间复制数据的最简捷的方法。 7 在IIS中配置SQL XML支持 (Configure SQL XML Support in IIS) IIS(Internet Information Services 因特网信息服务),此工具可以在运行IIS的计算机上定义、注册虚拟目录,并在虚拟目录和SQL Server 实例之间创建关联。,7.2.2 创建用户数据库student和ODBC数据源,SQL Server服务器上存放着一组系统数据库和用户数据库。 用户数据库Student是我们本章要用的数据库,存放着学生的基本信息、课程情况和学生学习各门课程的学习成绩。Student数据库中有学生情况表S、课程情况表C和学习成绩表SC。 S由学号、姓名、性别、年龄和所在系各字段组成; C由课程号、课程名和学分各字段组成; SC由学号、课程号和学习成绩各字段组成。,1. 在Microsoft SQL Server服务器上创建数据库student,进入查询分析器(Query Analyzer),通过运行下面的脚本文件student.sql ,完成创建数据库student和三张表S、C和SC。,2. 创建ODBC数据源,用window控制面板中数据源“ODBC”管理器,创建一个连接到SQL Server的数据源 数据源名称为studentDSN, 连接的数据库是student,用户为sa,口令为1(空)。此数据源名studentDSN本章中的例子中使用。,7.3 Java应用程序通过JDBC存取数据库的过程,本节首先介绍通过JDBC存取数据库的步骤, 然后通过一个简单实例演示整个过程。,7.3.1 应用JDBC存取数据库的步骤,Java应用程序通过JDBC存取数据库时应该遵循五个步骤: 1. 加载(注册)适当的JDBC驱动程序 2. 建立数据库连接 3. 建立与执行SQL语句 4. 处理结果集 5. 关闭数据库连接,1. 加载( 注册)JDBC驱动程序,加载JDBC驱动程序通常有下列两种方法: (1) 使用Class.forName() 语法:Class.forName(驱动程序名称); 例如:加载jdbc-odbc驱动程序, Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); 例如:加载Oracle JDBC驱动程序: Class.forName(“oracle.jdbc.driver.OracleDriver“); 此操作只是向JVM注册,并没有建立一个实例对象,如果需要在程序中参照Driver对象,必须用new进行实例化。如: Driver oracledry = new oracle.jdbc.driver.OracleDriver();,1. 加载( 注册)JDBC驱动程序(续),(2) 使用DriverManager.registerDriver() DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver();,2 建立数据库连接,使用DriverManger.getConnection(),建立一个新的数据库连接。方法: Connnetion getConnection(String URL); 返回连接到特定数据库的Connnetion对象。参数String用来定义JDBC URL。 JDBC URL由三部分组成: jdbc:subProtocol:subName 即主通信协议、子通信协议和子名称。如连接SQL server 2005数据库可设URL为jdbc:odbc:MSSQL,其中主通信协议为jdbc,子通信协议为odbc,子名称是ODBC的DSN。,2 建立数据库连接(续),建立数据库连接的代码段如下: 通过数据源连接: String url =“jdbc:odbc:studentDSN“; String login = “sa“; String password =“1”; Connection conn = DriverManager.getConnection(url,login,password); 通过机器名或IP连接: String url = “jdbc:odbc:Driver=SQLerver;Server=image;uid=sa;pwd=;Database=jspdb“; 如果用IP只需将服务器名image改为192.168.0.36即可.,2 建立数据库连接(续),如果URL中不包含uid和pwd,也可写成: Connection conn = DriverManager.getConnection(URL,“sa“,null); 如果是Access数据库只需将URL改为: String url = “jdbc:odbc:Driver=Microsoft Access Driver(*.mdb);DBQ=c:/data/test.mdb“;,3建立SQL语句对象,执行查询,建立新数据库连接以后,必须先建立一个Statement对象才能执行SQL语句。在Java中,定义了三种类型的Statememt,它们是Statement、PreparedStatement和CallableStatement。三种均包含用于进行数据库操作的SQL语句。 (1)使用Statement。示例如下: Statement Stmt =conn.createStatement(); String sqlQuery=“select * from Employee”; ResultSet rs= Stmt.executeQuery(sqlQuery);,3建立SQL语句对象,执行查询(续),(2)使用PreparedStatement 用于处理预编译的SQL语句,可重复执行。示例如下: PreparedStatement prepStmt = conn.prepareStatement (“SELECT * FROM Employee “); ResultSet rset=prepStmt.executeQuery(); 利用WHERE来限制SELECT语句的查询结果,示例如下: PreparedStatement prepStmt=conn.prepareStatement (“SELECT * FROM Employee WHERE ename=? “) prepStmt.setString(1,“SCOTT“); /setString设置要传入的第一个参数的值是SCOTT ResultSet rset = prepStmt.executeQuery();,3建立SQL语句对象,执行查询(续),执行UPDATE语句,示例如下: PreparedStatement prepStmt= conn.prepareStatement (“UPDATE emp SET sal = ? WHERE ename = ? “); prepStmt.setInt(1,100000); /设置要传入的第一个参数(?)值是100000 prepStmt.setString(2,“Rich“); /设置要传入的第二个参数(?)值是“Rich“ prepStmt.executeUpdate();,3建立SQL语句对象,执行查询(续),(3) 使用CallableStatement用来调用数据库存储过程 语法: CallableStatement 变量名=conn.prepareCall(call 存储过程名称); 示例如下: CallableStatement callStmt= conn.prepareCall(“call update_salary(?,?)“); callStmt.setInt(1,7788); /设置要传入的第一个输入参数(?)值是7788 callStmt.setInt(2,10000); /设置要传入的第二个输入参数(?)值是10000 callStmt.execute();,3建立SQL语句对象,执行查询(续),上面的建立Statement对象之后,有3种方法执行SQL语句,分别是: executeQuery():执行select的SQL查询语句 executeUpdate():执行insert、delete、update 更新语句,以及DDL语句。 execute():执行select的SQL查询语句。,3建立SQL语句对象,执行查询(续),例如: /SQL查询语句 ResultSet rset=stmt.executeQuery(SELECT * FROM emp); / update语句 stmt.executeUpdate(“update emp set age=sge+1“); / delete语句 stmt.executeUpdate(“delete emp for age=20“); /DDL语句 stmt.executeUpdate(“CREATE TABLE table“+“(no CHAR(10),name CHAR(10)“);,4. 处理结果集,可用while循环打印出ResultSet记录集内所有记录。 while(rs.next() System.out.println(rs.getInt(1); System.out.println(rs.getString(2); 1、2、3、表示各字段相对位置,5. 关闭数据库连接,通过JDBC存取数据库时最后一个操作是关闭Connection、Statement、ResultSet等对象. rs.close(); stmt.close(); con.close();,7.3.2 JDBC存取SQL Server数据库的简单实例,例7-1 编写通过JDBC存取student数据库中的表C的Java程序。 本例利用前面7.2节创建好的ODBC数据源,名称为studentDSN,存取student数据库,/jdbcExample1.java import java.sql.*; import javax.swing.*; class jdbcExample1 public static void main(String args) try /加载JDBC驱动程序 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); / String url =“jdbc:odbc:studentDSN“; String login = “sa“; String password =“1“; /通过数据源连接 Connection conn = DriverManager.getConnection(url,login,password); /建立SQL语句对象 Statement statement =conn.createStatement(); String sqlQuery=“select * from course“; /执行查询 ResultSet rs= statement.executeQuery(sqlQuery); while(rs.next() /处理结果集 System.out.print(rs.getString(1)+“,“); System.out.print(rs.getString(2)+“,“); System.out.print(rs.getInt(3)+“,“); ,/关闭数据库连接 statement.close(); conn.close(); /捕获异常 catch ( SQLException sqlException ) JOptionPane.showMessageDialog( null, sqlException.getMessage(), “Database Error“, JOptionPane.ERROR_MESSAGE ); System.exit( 1 ); / detect problems loading database driver catch ( ClassNotFoundException classNotFound ) JOptionPane.showMessageDialog ( null, classNotFound.getMessage(), “Driver Not Found“, JOptionPane.ERROR_MESSAGE ); System.exit( 1 ); /end of main /end of class,c1 , 数据库, 4 c2 , 数学, 2.5 c3 , 信息系统, 4 c4 , 英语, 3,7.4 JDBC中的主要接口和类,Java应用程序访问数据库主要是通过JDBC API实现的,通过下面几个重要接口和类: DriverManager类 Connection接口 Statement接口 PreparedStatement接口 CallableStatement接口 ResultSet接口 ResultSetMetaData接口 DatabaseMetaData接口 Java的基本数据类型和SQL中支持的数据类型对应关系。,7.4.1 DriverManager类,DriverManager类是Java.sql包中用于数据库驱动程序管理的类,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接,也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。 DriverManager 类直接继承自java.lang.object,其主要成员方法(请参见本书),7.4.2 Connection接口,Connection接口是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接的基础上进行的。Connection接口的主要成员方法(请参见本书),7.4.3 Statement接口,Statement接口用于在已经建立的连接的基础上向数据库发送SQL语句的对象。它只是一个接口的定义,其中包括了执行SQL语句和获取返回结果的方法。 有3种 Statement 对象:Statement、PreparedStatement(继承自Statement )和 CallableStatement(继承自PreparedStatement)。它们都作为在给定连接上执行 SQL 语句的容器,每个都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。,7.4.3 Statement接口,创建statement对象的方法如下: Statement stmt = con.createStatement(); Statement接口定义中包括的主要方法(请参见本书),7.4.4 PreparedStatement接口,PreparedStatement接口和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令需多次执行时,用PreparedStatement会比Statement效率更高。 PreparedStatement接口的主要方法,7.4.5 CallableStatement 接口,CallableStatement接口用于执行对数据库已存储过程的调用。在CallableStatement对象中,有一个通用的成员方法call,这个方法以名称的方式调用数据库中的存储过程。在数据库调用过程中,可以通过设置IN参数向调用的存储过程提供执行所需的参数。另外,在存储过程的调用中,通过OUT参数获取存储过程的执行结果。 CallableStatement 接口的主要成员方法,7.4.6 Java数据类型和SQL中支持的数据类型的对应关系,Java的基本数据类型和SQL中支持的数据类型有一定的对应关系。这种对应关系如表所示,7.4.7 ResultSet接口,ResultSet接口负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作;也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。 ResultSet接口主要方法(请参见本书),7.4.8 ResultSetMetaData接口,ResultSetMetaData接口的对象保存了所有ResultSet类对象中关于字段的元信息,并提供许多方法来取得这些信息。 ResultSetMetaData接口中的方法(请参见本书),7.4.9 DatabaseMetaData接口,DatabaseMetaData接口保存了数据库的所有特性,并且提供许多方法来取得这些信息。 DatabaseMetaData类的主要方法(请参见本书),7.5数据库开发应用实例,本节利用前面建立的SQL Server的数据库Student和ODBC数据源studentDSN,安排了对数据库进行插入、修改、删除和查询的Java程序设计。这些程序设计实例在设计时,考虑了通用性原则,应用了通用性的程序设计技术。其好处是:你可以利用本节示范的程序设计例子很容易编写访问其它数据库的Java应用程序。,7.5.1 student数据库的插入、修改、删除记录的程序设计,对Student数据库中的表S完成输入、修改、删除的Java程序。这三个程序有相似的GUI,因此声明类StudentUI以封装该GUI。 例13-2 对Student数据库中的表S完成增加记录的程序设计。 程序由两个类AddStudentFrame和StudentUI组成。 将 StudentUI类放在子包UI中; 在类AddStudentFrame中,用语句import UI.StudentUI;导入子包中类StudentUI。,类StudentUI设计思路,类StudentUI完成输入记录的画面设计,其设计思路如下: (1) 调用者利用StudentUI类构造方法的参数(字符型数组String arrayString),传递输入记录画面上一组列的标题。 在StudentUI类构造方法中, 从数组arrayString的实例变量arrayString.length中可得到列的个数,并取出列的标题放在labels数组。 (2) 定义一组文本字段fields用于编辑一张表的记录各字段,并且调用者通过方法getFields()和setFields()可读取和设置fields值。 (3) 类StudentUI界面上提供两个通用Button按钮doTask1、 doTask2,按钮的标签内容和按钮的事件处理过程,可通过调用者来设置。 类StudentUI的程序代码,类AddStudentFrame设计思路,类AddStudentFrame是一个Frame, 在此类中创建StudentUI的对象并将它添加到Frame。 在创建StudentUI对象时,调用构造方法,将要显示的记录的一组列标题,传递给StudentUI对象; 并从StudentUI对象中得到用户输入的记录的各字段值; 两个通用按钮的内容和事件处理代码在此类中也得到设置。类AddStudentFrame的代码,例7-2 对student数据库中的表Student完成增加记录的程序执行结果,7.5.1 student数据库的插入、修改、删除记录的程序设计(续),例7-3 对Student数据库中的表S完成修改记录的程序设计。 程序根据用户输入的要修改的学号值,定位并修改表S中的记录。若数据库中对应的记录不存在,则显示无此记录的提示。程序代码如下: UpdateStudentFrame.java的代码,例7-3 对student数据库中的表S完成修改记录的程序执行结果,7.5.1 student数据库的插入、修改、删除记录的程序设计(续),例13-4 对Student数据库中的表S完成删除记录的程序设计。 程序根据用户输入的要删除的学号值,定位并删除表S中的记录。若数据库中对应的记录不存在,则显示无此记录的提示。程序代码如下: DeleteStudentFrame.java,例7-4 对student数据库中的表Student完成删除记录的程序执行结果,7.5.2 查询student数据库的程序设计,例13-5 对student数据库完成查询记录的程序设计。 该程序利用Java的GUI组件JtextArea(多行文本编辑域),显示从数据库查询得到的student表的记录集合。此程序在类DisplayStudents(从Frame继承)中建立数据库连接,定义要执行的SQL语句字符串,执行SQL语句得到查询结果集对象resultSet。利用语句: ResultSetMetaData metaData = resultSet.getMetaData(); 取得查询结果集的元数据ResultSetMetaData的对象metaData。调用metaData对象的方法getColumnCount()取得结果集中列的个数,调用getColumnName( i ) 取得结果集中的第i列的名称。,7.5.2 查询student数据库的程序设计(续),接着执行循环语句: while ( resultSet.next() ) for ( int i = 1; i = numberOfColumns; i+ ) results.append( resultSet.getObject( i ) + “t“ ); results.append( “n“ ); 循环执行之前结果集的指针开始定位在第一条记录之前,next()方法向下移动一条记录。方法getObject( i )读取第i条记录添加到文本编辑域变量results中。此过程不断重复,直到结果集的指针定位到表的最后一条记录之后的位置或文件尾(即next()返回值为假)为止。最后在Frame中显示文本编辑域变量results的值。,7.5.2 查询student数据库的程序设计(续),注意:此程序在设计时,考虑了程序的通用性:即通过修改此程序中定义中ODBC数据库源名称和要执行的SQL语句字符串,此程序可对任何数据库中的表进行查询操作。 类DisplayStudents的代码,例7-5 对student数据库完成查询记录的程序执行结果,7.5.2 查询student数据库的程序设计(续),例13-6 以表格格式显示数据库的查询结果的程序设计。 此程序运行时,用户能自定义要查询的SQL语句,包括单表查询、多表查询,有条件的查询、无条件的查询,以及对表的统计查询。运行的结果以二维表格的形式表现。 为了在用户界面上以二维表格形式表现查询结果,可以利用JTable表格类和AbstractTableModel表格模型类。 用JTable类以二维表的形式显示,数据表格中的数据从表格模型 AbstractTableModel类的对象中获取。下面先介绍这两个类。,1类JTable,JTable组件属于javax.swing包,它能以二维表的形式显示数据。类JTable在显示数据时具有以下特点: (1)可定制性:可以定制数据的显示方式和编辑状态; (2)异构性:可以显示不同类型的数据对象,甚至包括颜色、图标等复杂对象; (3)简便性:可以以缺省方式轻松地建立起一个二维表。 使用类JTable显示数据之前,必须根据情况先生成定制的表格模型、单元绘制器或单元编辑器。类AbstractListModel用来定制用户自己的表格模型。 创建JTable的表格对象时,将捆绑定制的表格模型。例如: JTable table = new JTable(dataModel); /dataModel是定制的表格模型对象 JScrollPane scrollpane = new JScrollPane(table); /将表格添加到可滚动的面板,2. 类AbstractTableModel,类AbstractTableModel,提供了TableModel接口中绝大多数方法的缺省实现。类AbstractTableModel隶属于javax.swing.table。该类是一个抽象类,没有完全实现,不能实例化,使用时必须在程序中实现方法。 要想生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面以下三个方法: public int getRowCount(); /得到表格的行数 public int getColumnCount(); /得到表格的行数 public Object getValueAt(int row, int column); /得到表格的第row行、第column列的单元值,2. 类AbstractTableModel (续),例如,我们可以建立一个简单二维表(1010),实现方法如下: TableModel dataModel = new AbstractTableModel() /定制自己的表格模型 public int getColumnCount() return 10; public int getRowCount() return 10; public Object getValueAt(int row, int col) return new Integer(row*col); ; JTable table = new JTable(dataModel);/捆绑定制的表格模型 JScrollPane scrollpane = new JScrollPane(table); /将表格添加到可滚动的面板,例7-6 以表格格式显示数据库的查询结果的程序设计的思路,在例13-6中,为了实现在表格中显示数据库的查询结果,用一个TableModel对象把ResultSet数据提供给JTable,在JTable中显示查询结果。 ResultSetTableModel类执行与数据库的连接和生成ResultSet对象。 DispalyQueryResults类创建GUI,并建立JTable的对象,并从ResultStTableModel的对象中获得数据。,例7-6 以表格格式显示数据库的查询结果的程序设计的思路(续),ResultStTableModel类的构造方法接收三个参数:数据库驱动程序列的名称、数据库的URL、和要执行的查询SQL语句的字符串。类中使用的createStatement方法如下: statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY ); 其版本带有两个参数:结果集类型和结果集的并发性。结果集类型规定ResultSet的游标移动的方向以及Result是否对变化敏感。结果集的并发性规定是否能用ResultSet的更新方法更新ResultSet。上面语句规定了一个游标可沿两个方向滚动的、对变化敏感的和只读的ResultSet。,例7-6 以表格格式显示数据库的查询结果的程序设计的思路(续),ResultStTableModel类是AbstractTableModel类的子类,在此类中重写了TableModel 的方法有getColumnCount()、getRowCount()、getValueAt和getColumnNam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保健知识培训开头课件
- 企业节前安全培训检查表课件
- 企业的安全管理培训文件课件
- 烟草执法徽章管理办法
- 物业项目督查管理办法
- 新质生产力发展新动能
- 2025年全国中级导游等级考试(汉语言文学知识)自测试题及答案
- 2025年全民实践乡村振兴战略知识竞赛题库及含答案
- 出租车驾驶员培训教学课件
- 出租房安全知识培训课件
- 新人教版七年级上册生物全册教案(2024年秋季新版教材)
- 高标准农田改造提升建设项目投标方案(技术标)
- 汽车产品使用说明书
- 关于天然气安全知识
- (高清版)DZT 0331-2020 地热资源评价方法及估算规程
- 体育消费及消费者行为
- 新能源发电技术 第2版 教学课件 8波浪能
- 摩托车行驶安全知识
- 多组学数据的整合与分析
- 四合院设计方案
- 国有集团“三重一大”决策制度实施办法(附详细版事项清单及议事规则)模版
评论
0/150
提交评论