《Java高级程序设计》课件-学习情境8 Java访问数据库_第1页
《Java高级程序设计》课件-学习情境8 Java访问数据库_第2页
《Java高级程序设计》课件-学习情境8 Java访问数据库_第3页
《Java高级程序设计》课件-学习情境8 Java访问数据库_第4页
《Java高级程序设计》课件-学习情境8 Java访问数据库_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java使用JDBC访问数据库一、应用场景二、JDBC技术三、Java使用JDBC访问数据库的步骤四、Java对数据库表执行CRUD操作本学习情境主要内容3一、应用场景大多数软件系统都需要处理非常庞大的数据,这些数据并不是使用内存数据或集合就能解决的,这时就需要借助数据库系统。使用Java语言,配合JDBC技术提供的API,可以用纯Java语言实现对数据的增删查改操作,从而编写完整的数据库应用程序。二、JDBC技术1.数据库访问技术数据存放在数据库的表中,要对数据库中的数据进行增删改查操作,需要访问数据库。一般来说,访问数据库有两种方式:一是通过DBMS提供的数据库管理工具来访问,如通过SQL

Server

2000的查询分析器或企业管理来访问。这种方式比较适合DBA对数据库进行管理。二是通过API(Application

Programming

Interface,

应用编程接口)来访问数据库,这种方式适合在应用程序中访问数据库。2.JDBC常用类和接口JDBC(JavaDataBaseConnectivity,Java数据库连接)是Java语言中用来规范客户端程序访问数据库的应用程序接口。JDBC提供了一系列的类和接口,可用于我们编程开发,方便的进行数据访问和处理。这些类和接口都位于java.sql包中。类和接口描述Driver接口规范了作为Java开发人员该怎么去访问数据库。但这只是一个接口,一种规范。具体接口的实现,是数据库厂商以驱动的形式实现的。因此,首先要加载驱动,也就是生成一个相应Driver接口的实例。DriverManager类驱动程序管理器类,负责管理各种不同的驱动程序。驱动程序加载后,可通过该类的静态方法getConnection(URL)连接到一个数据库,并返回一个Connection对象。Connection接口该接口的对象,表示与指定数据库的连接。只有连接成功后,才能执行后续有关数据库的所有操作。Statement接口它将SQL语句传送给数据库并返回结果。简单地说,使用Connection连接到数据库,由Statement创建和执行SQL语句。ResultSet接口针对有返回结果的SQL语句,ResultSet接口用来处理结果。其中存有一个表,该表的当前行(初始位置为null)可以被访问。调用其next()方法可以将当前行下移,调用其get()方法可以从当前行获取值。JDBC常用类和接口Driver接口规范了作为Java开发人员该怎么去访问数据库。但这只是一个接口,一种规范。具体接口的实现,是数据库厂商以驱动的形式实现的。因此,首先要加载驱动,也就是生成一个相应Driver接口的实例。DriverManager类驱动程序管理器类,负责管理各种不同的驱动程序。驱动程序加载后,可通过该类的静态方法getConnection(URL)连接到一个数据库,并返回一个Connection对象。Connection接口该接口的对象,表示与指定数据库的连接。只有连接成功后,才能执行后续有关数据库的所有操作。Statement接口它将SQL语句传送给数据库并返回结果。简单地说,使用Connection连接到数据库,由Statement创建和执行SQL语句。ResultSet接口针对有返回结果的SQL语句,ResultSet接口用来处理结果。其中存有一个表,该表的当前行(初始位置为null)可以被访问。调用其next()方法可以将当前行下移,调用其get()方法可以从当前行获取值。三、Java使用JDBC访问数据库的步骤访问数据库就是对数据库进行增删改查(CRUD)操作,JDBC抽象了数据库进行交互的过程。用JDBC来实现访问数据库具体操作步骤如下:(1)加载驱动使用Class.forName()方法显式加载一个驱动程序。这里使用的是MySQL数据库,所以加载的是MySQL驱动。Class.forName("com.mysql.jdbc.Driver");(2)建立连接Stringurl="jdbc:mysql://localhost:3306/bms";connectionconn=DriverManager.getConnection(url,”root”,”123456”);采用DriverManager类中的getConnection方法实现与url所指定的数据源建立连接并返回一个Connection类的对象,以后对这个数据源的操作都是基于该Connection类对象。(3)发送SQLStatementstmt=conn.createStatement();Stringsql=“SELECT*FROMbook”;ResultSetrs=stmt.executeQuery(sql);创建Statement对象或PreparedStatement对象,通过该对象向数据库发送SQL命令,调用该对象的execute()等方法来实现增删改查操作。需要强调的是,PreparedStatement对象提供了一系列的方法用于操作数据库表记录。对于需要返回结果集的SELECT语句,使用executeQuery()方法,查询成功则以Resultset对象的形式返回查询结果。如果对数据库系统发送INSERT、UPDATE和DELETE的SQL语句,则采用executeUpdate()方法。返回类型为int,表示数据库表收到INSERT、UPDATE和DELETE语句影响的数据行数。(4)处理结果集while(rs.next()){ intbNo=rs.getInt("bNo"); Stringtitle=rs.getString("title"); Stringauthor=rs.getString("author"); StringbType=rs.getString("bType"); intnumber=rs.getInt("number");}使用其next()、get()方法处理结果集。当ResultSet对象rs指到最后一个的下一个时,返回falseResultSet对象包括一个包含所有查询结果的表。最初,游标位于结果集的第一行的前面,可以用ResultSet.next方法使指针下移一行对结果逐行处理。并用ResultSet类的get方法将数据库各个字段名类型转换为Java类型。(5)关闭查询语句及数据库连接if(stm!=null){stm.close();}if(con!=null){con.close();}在程序结束前应依次关闭Statement对象和Connection对象,使用close()方法。四、Java对数据库表执行CRUD操作在dao包下创建BookDAO类,定义CRUD操作方法4.1添加图书编写addBook(Bookbook)方法首先使用insertinto语句并提供占位符构建插入记录的sql字符串,然后为每个占位符设置值,即Java对象的相对应的属性值再通过DBManager.getConn()方法获取与数据库的连接conn,通conn创建PrepareStatement对象,传递SQL命令,最后调用该对象的executeUpdate()方法完成插入操作。4.2查询图书编写List<BookInfo>queryByBookName(Stringbname)首先使用selectfromwhere语句并提供占位符构建查询记录的sql字符串,然后为每个占位符设置值,这里使用模糊查询bname="%"+bname+"%";。再通过PrepareStatement对象传递SQL命令,调用该对象的executeQuery()方法完成查询操作,返回结果集给rs。最后对rs进行解析,转换为Java对象,添加到bookList集合中并从该方法带回。4.3删除图书编写方法booleandelBookById(intid)首先使用deletefrom语句并提供占位符构建删除记录的sql字符串,然后为每个占位符设置值,这里使用id。再通过DBManager.getConn()方法获取与数据库的连接conn,通conn创建PrepareStatement对象,通过PrepareStatement对象传递SQL命令。最后调用该对象的execute()方法完成删除操作。4.4修改图书编写方法booleanupdate(BookInfobook)首先使用updateset语句并提供占位符构建更新记录的sql字符串,然后为每个占位符设置值,即为给定Java对象的相对应的属性值。再通过DBManager.getConn()方法获取与数据库的连接conn,通conn创建PrepareStatement对象,通过PrepareStatement对象传递SQL命令。最后调用该对象的executeUpdate()方法完成删除操作。小结本学习情境讲述了JDBC应用场景JDBC技术Java使用JDBC访问数据库的步骤Java对数据库表执行CRUD操作的编程步骤Java使用JDBC访问数据库的使用实例Java使用JDBC访问数据库的使用实例33一、任务描述二、任务分析、设计三、任务实施四、运行结果本学习情境主要内容35一、任务描述本任务是使用JavaJDBC编写访问数据库的应用程序任务需求:使用JavaJDBC编写连接MySQL数据库的程序;使用JavaJDBC编写CRUD操作数据库的应用程序。二、任务分析、设计实现思路:使用Java连接字符串连接MySQL数据库。设计方法addBook(Bookbook)、delBookById(intid)、updateBook(Bookbook)、findAll()等,分别完成对数据库的表进行增、删、改查等操作。三、任务实施3.1编码实现Java使用JDBC连接MySQL数据库创建数据库使用Navicat

forMySQL创建数据库创建表CREATETABLE`Book`(`ID`int(10)NOTNULLauto_increment,`bookNo`varchar(10)NOTNULL,`bookname`varchar(40)NOTNULL,`author`varchar(20)defaultNULL,`publisher`varchar(20)defaultNULL,`price`double(4,0)defaultNULL,`publishtime`varchar(8)defaultNULL,`ISBN`varchar(20)defaultNULL,`amount`int(4)defaultNULL,PRIMARYKEY(`ID`,`bookNo`),UNIQUEKEY`indexbookNo`(`bookNo`))ENGINE=InnoDBDEFAULTCHARSET=utf8;

1.新建类DBManager该类用于管理数据库,其中的getConn()方法获取与Mysql的连接首先定义DRIVER、URL、USRENAME、PASSWORD等,用于连接数据库所使用的连接字符串。然后使用DriverManager.getConnection(URL,USRENAME,PASSWORD)来创建Connect的对象,用于连接Mysql数据库连接mysql数据库需要使用连接的jar包,这里使用mysql-connector-java-5.1.40.jar包。下载该jar包然后添加到项目中。右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择路径及jar包。再编写测试方法,看是否连接成功。publicstaticvoidmain(String[]args){

System.out.print(DBManager.getConn());}3.2编码实现对数据库表作查询操作编写查询方法List<Book>findAll()首先使用selectfromwhere语句构建查询所有记录的sql字符串,然后通过PrepareStatement对象传递SQL命令,调用该对象的executeQuery()方法完成查询操作,返回结果集给ResultSet的对象rs。再对rs进行解析,循环为每一行数据转换为Java对象,并添加到bookList集合中。最后把bookList集合从该方法带回。publicclassListTest{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstubBookDAObookDAO=newBookDAO();List<Book>books=bookDAO.findAll();for(BookBook:books){System.out.println(Book.getId()+"\t"+Book.getBookNo()+"\t"+Book.getBookname()+"\t"+Book.getAuthor()); } }}创建BookDAO对象,调用其方法findAll(),对其返回的List集合进行遍历输出。3.3编码实现对数据库表作添加操作编写方法boolean

addBook(Bookbook)首先使用insertinto语句并提供占位符构建插入记录的sql字符串,然后为每个占位符设置值,即Java对象的相对应的属性值再通过DBManager.getConn()方法获取与数据库的连接conn,通conn创建PrepareStatement对象,传递SQL命令,最后调用该对象的executeUpdate()方法完成插入操作。编写测试类首先创建Book对象,然后创建BookDAO对象,调用其方法addBook(book),完成对数据库的表进行插入操作。3.4编码实现对数据库表作修改操作编写方法updateBook(Bookbook)首先使用updateset语句并提供占位符构建更新记录的sql字符串,然后为每个占位符设置值,即为给定Java对象的相对应的属性值。再通过DBManager.getConn()方法获取与数据库的连接conn,通conn创建PrepareStatement对象,通过PrepareStatement对象传递SQL命令。最后调用该对象的executeUpdate()方法完成删除操作。编写测试类首先创建Book对象,然后创建BookDAO对象,调用其方法updateBook(book),完成对数据库的表进行插入更新操作。3.5编码实现对数据库表作删除操作编写delBookById(intid)方法

首先使用deletefrom语句并提供占位符构建删除记录的sql字符串,然后为每个占位符设置值,这里使用id。再通过DBManager.getConn()方法获取与数据库的连接conn,通conn创建PrepareStatement对象,通过PrepareStatement对象传递SQL命令。最后调用该对象的execute()方法完成删除操作。编写测试类首先创建BookDAO对象,调用其方法delBookById(id),完成对数据库的表的删除新操作。1.启动服务器端程序2.启动客户端程序3.服务器端/客户端分别发送接受数据4.运行结果运行结果最终运行结果如图所示小结本学习情境通过一个实例讲述了Java使用JDBC连接数据库的步骤使用JDBC操作数据库表的步骤。Java使用第三方控件访问数据库一、应用场景二、第三方控件三、DBCP连接池四、JSON五、JFreeChart本学习情境主要内容61一、应用场景在互联网上有很多Java类库,这些类库会帮助Java开发人员解决在编程中遇到的相关问题。这些类库是由第三方开发团队开发的,包含了允许扩展功能的软件包即jar包,迎合不同类型的Java应用程序。使用第三方组件,程序员可以避免大量编码,减少开发工作量及由于逻辑或算法造成的程序异常,从而降低开发成本,提高开发效率。第三方控件已经很容易能够找到,一些技术社区、源码站、CSDN、技术博客或是第三方控件的官网。也可以利用利用搜索引擎,来寻找第三方控件。二、第三方控件2.1第三方控件的概念项目开发程序员自己开发的控件是第一方控件。平台提供的控件是第二方控件。由其他人提供的控件就是第三方控件。这些第三方控件一般是自定义控件或者用户控件,它们继承自Java中的某些基类,重写或者扩展了一些方法和属性,从而能实现某些新的功能,同时它们有较大的可定制性,可以根据使用者的需要设置不同的特性,能够完全适应特定项目的需求。比如一些日期控件,数据控件等。使用第三方控件的优缺点:优点:不用自己写,使用方便,提供强大的功能,节省成本,效率高。缺点:第三方组件也存在缺点,由于第三方组件是第三方组织或者个人提供的,在开发时提供的版本可能会出现Bug。一旦出现Bug,在解决时就相当麻烦。建议:结合Java工程项目的情况,合理使用第三方控件。2.2一些常用的第三方控件1.CommonsMathCommonsMath是Apache上一个轻量级自容器的数学和统计计算方法包,包含大多数常用的数值算法。2.ApacheLog4jApacheLog4j是Apache的一个开放源代码项目。通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等。

3.JacksonJackson是一个用来处理JSON格式数据的Java类库,性能非常好。它可以轻松地将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。

4.JFreeChartJFreeChart是Java平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications、applets、servlets以及JSP等使用所设计的。5.TensorFlow一个机器学习框架。TensorFlow是一个使用数据流图进行数值计算的开源软件库,是GitHub上最受欢迎的机器学习项目,也是参与者和贡献者最多的机器学习项目。TensorFlow主要是用Python编写的,但它也支持Java和Go的一些用法。2.3第三方控件的使用方法1.下载第三方组件相应的jar包文件。2.将jar包导入到Java工程项目中。3.引用jar包的类、方法等编写应用程序1.数据库连接池的概念池(Pool),是一个资源的集合,当使用的时候按照需要去取,使用完了就回收。池的概念被广泛的应用在服务器端软件的开发上。池技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。广义的池,比如数据库连接池、线程池、内存池、对象池等。三、DBCP连接池数据库连接池(ConnectionPool)技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接的使用、分配、管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。数据库连接池负责分配、管理和释放数据库连接。2.数据库连接池的种类Java中常用的数据库连接池有:DBCP,是apache

上的一个java连接池项目,也是tomcat使用的连接池组件。C3P0,是一个开源的JDBC连接池Druid,阿里巴巴开源的数据库连接池项目还有其他的如:Proxool、DBPool、SmartPool等3.DBCP及相关依赖包相关依赖包包含3个jar包:commons-collections-3.1.jarcommons-dbcp-1.2.1.jarcommons-pool-1.2.jar4.DBCP参数说明username用于建立连接的用户名password用于建立连接的密码url用于建立连接的URLdriverClassName使用的JDBC驱动的完整有效的Java

类名initialSize初始化连接maxActive最大活动连接maxIdle最大空闲连接minIdle最小空闲连接maxWait最大等待时间1.JSON的概念四、JSONJSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式。易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON字符串,本质是一个字符串。基本结构:对象、数组。对象由花括号括起来的逗号分割的成员构成,成员是字符串键和值由逗号分割的键值对组成,如:{"name":"JohnDoe","age":18,"address":{"country":"china","zip-code":"10000"}}数组是由方括号括起来的一组值构成,如:[{"name":"张三","age":18},{"name":"李四","age":19},{"name":"王五","age":17}]2.主流的JSON目前对于Java开源的JSON类库有很多种,其中主流的JSON主要有:json-lib开源的JacksonGoogle的Gson阿里巴巴的FastJson3.Gson及相关依赖包Gson依赖包:gson-2.8.6.jarGson是Google公司为其内部需求而研发的4.Gson常用用法Gson提供了toJson()方法将对象转换成Json字符串。如:Gson

gson=newGson();Personperson=newPerson();Stringstr=gson.toJson(person);首先使用Gson构造函数生产Gson的对象,然后调用toJson()方法将对象转换成Json字符串;Gson提供了fromJson()方法来实现从Json字符串到java实体对象的方法。Stringstr=”[{"name":"name0","age":0}]”;Personperson=gson.fromJson(str,Person.class);首先定义一个符合JSON格式的对象的字符串,然后通过Gson的对象调用fromJson()方法生成Java对象1.关于JFreeChart五、JFreeChartJFreeChart是Java平台上的一个开放的图表绘制类库,使用它可以生成多种通用性的报表,如:饼图(piecharts)、柱状图(barcharts)、散点图(scatterplots)、时序图(timeseries)、甘特图(Ganttcharts)等等,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。JFreeChart可以在应用程序、小程序、servlet和JSP中使用。2.JFreeChart依赖包需要2个jar文件:jcommon-版本号.jarjfreechart-版本号.jar官网下载:/projects/jfreechart/files/3.JFreeChart常用用法创建JFreeChart步骤大致分为以下三步:第一步,创建数据集对象DefaultCategoryDataset

dataSet=newDefaultCategoryDataset();通过DefaultCategoryDataset构造数据集对象第二步,创建JFreeChart对象

JFreeChartchart=ChartFactory.createBarChart3D();或者JFreeChartchart=newJFreeChart();通过ChartFactory工厂类创建JFreeChart

图表对象第三步,创建呈现媒介,并将chart装入媒介ChartFrame

cf=newChartFrame(title,chart,true);通过ChartFrame

创建chart要放置的Java容器组件对象,ChartFrame继承自java的Jframe类。该第一个参数title是窗口左上角标题。chart是前面程序JFreeChart定义的变量名,true表示是否设置滚动条小结本学习情境讲述了应用场景第三方控件的概念、常用的第三方组件、使用方法DBCP连接池的概念、依赖包及参数JSON的概念、常用JSON及用法JFreeChart的依赖包及使用方法Java使用第三方组件访问数据库的使用实例一、任务描述二、任务分析、设计三、任务实施四、运行结果本学习情境主要内容94一、任务描述本任务是使用第三方组件编写访问数据库的应用程序任务需求:假设有图书信息表Book。1.使用数据库连接池连接数据库。2.将查询的结果转换成JSON格式,以便于网络传输或显示。3.查询统计图书,并把结果用图形方式显示。二、任务分析、设计1.DBCPConnPool类,统一管理数据库的连接和关闭,数据库的连接采用连接池。2.Book类,存放图书基本信息,3.BookDAOWithDBCPConnPool类,封裝对数据库表的CRUD操作方法4.BookService类,封装业务方法。方法StringqueryByBookname(Stringbookname),是按书名查询,并返回JSON格式的字符串。方法Map<String,Integer>statisticAmountByPublisher(),是按出版社查询图书数量,并将查询统计的结果以Map集合方式返回5.按书名查询并将查询结果以JSON数据格式显示在控制台。6.分类统计图书,将查询结果使用JFreeChart控件显示。其类图如图8-1所示。三、任务实施数据库准备使用Navicat

forMySQL创建数据库创建表CREATETABLE`Book`(`ID`int(10)NOTNULLauto_increment,`bookNo`varchar(10)NOTNULL,`bookname`varchar(40)NOTNULL,`author`varchar(20)defaultNULL,`publisher`varchar(20)defaultNULL,`price`double(4,0)defaultNULL,`publishtime`varchar(8)defaultNULL,`ISBN`varchar(20)defaultNULL,`amount`int(4)defaultNULL,PRIMARYKEY(`ID`,`bookNo`),UNIQUEKEY`indexbookNo`(`bookNo`))ENGINE=InnoDBDEFAULTCHARSET=utf8;

在bean包下定义图书实体类Book封装属性、构造函数及setter和getter方法3.1编写DBConnPool.java,采用数据库DBCP连接池1.下载dbcp相关依赖包还需要comms-logging包和commons-pool2包,mysql-connector包版本要在5.0以上。DBCP连接池相关依赖包:commons-collections-3.1.jarcommons-dbcp2-2.7.0.jarcommons-lang3-3.11.jar下载地址:/proper/在项目名上右击,依次选择【BuildPath】-->【ConfigureBuildPath...】-->【JavaBuildPath】-->【Libraries】-->【AddExternalJars...】找到下载的jar包,点击【打开】2.导入相应的jar包3.在src同级目录下创建config目录,用于存放DBCP的配置文件。创建DBCP配置文件perties主要配置DBCP的参数。4.创建DBCPConnPool类在util包下创建DBCPConnPool类,该类用于配置数据源、从连接池中获取一个连接首先加载DBCP配置文件,用以配置数据源然后定义getConnection()方法,用以获取与数据库的连接。其中通过dataSource数据源的getConnection()方法获得连接。5.创建使用DBCP连接池的数据访问DAO类在dao包下创建BookDAOWithDBCPConnPool类。该类封装对数据库表的CRUD操作方法。其中addBook()方法为添加记录。首先定义插入记录字符串,使用占位符。然后采用DBCPConnPool数据库连接池的getConnection()获得一个连接conn,通过conn创建PreparedStatement对象,传入sql,调用executeUpdate()方法,执行插入操作。6.创建测试方法,采用JUnit4进行测试。首先在test包下新建JUnit4测试,然后添加测试用例,调用addBook()方法完成测试运行结果3.2将查询的结果转换成JSON格式这里采用Google的Gson。Gson依赖包:gson-2.8.6.jar官方下载地址:/maven2/com/google/code/gson/gson/1.下载JSON所需的jar包2.导入jar包到工程中在项目名上右击,依次选择【BuildPath】-->【ConfigureBuildPath...】-->【JavaBuildPath】-->【Libraries】-->【AddExternalJars...】找到下载的jar包,点击【打开】3.编写查询方法,将结果转换成JSON格式在service包下定义BookService类,其中定义StringqueryByBookname(Stringbookname)方法。该方法将查询的结果转为JSON格式。publicStringqueryByBookname(Stringbookname){ BookDAOWithDBCPConnPoolbDAOPool=newBookDAOWithDBCPConnPool(); List<Book>list=bDAOPool.queryByBookName(bookname); Gsongson=newGson(); StringlistJson=gson.toJson(list); returnlistJson; }使用BookDAOWithDBCPConnPool创建DAO的对象,然后调用dao的queryByBookName方法(该方法在dao中已定义),查询得到list集合再通过Gson生成gson对象,调用gson对象的toJson方法,将list集合对象转换成字符串后返回。4.编写测试方法。使用JUnit测试。 @Test publicvoidtestqueryByBookname(){ Stringbookname="Java";

System.out.println(queryByBookname(bookn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论