《JSP访问数据库》PPT课件.ppt

上传人:tia****nde 文档编号:11499036 上传时间:2020-04-26 格式:PPT 页数:62 大小:3.13MB
返回 下载 相关 举报
《JSP访问数据库》PPT课件.ppt_第1页
第1页 / 共62页
《JSP访问数据库》PPT课件.ppt_第2页
第2页 / 共62页
《JSP访问数据库》PPT课件.ppt_第3页
第3页 / 共62页
点击查看更多>>
资源描述
JSP访问数据库,关系数据库,AccessSQLserverOracle,数据库,DBMS,不同DBMS对底层数据有不同的操作方法,为了隐蔽DBMS和数据操作的差异性,产生了统一标准:SQL,SQL语言,Jdbc结构,SQL,driver,DBMS,将SQL调用转化为DBMSAPI调用,JDBC结构,Java.sql.*,JDBC应用程序结构,三种常见的JSP通过JDBC访问数据库的方法在JSP页面中直接访问数据库在Servlet中访问数据库通过JavaBean封装对数据库的访问,在JSP中可使用Java的JDBC技术,实现对数据库中表记录的查询、修改和删除等操作。JDBC(JavaDataBaseConnectivity)是Java数据库连接API。可完成三件事:与一个数据库建立连接;向数据库发送SQL语句;处理数据库返回的结果。,使用JDBC对数据库进行一次数据库操作需要进行如下的几个步骤:载入JDBC驱动程序定义连接使用的URL建立连接创建语句对象执行数据库操作处理结果关闭连接,JDBC和数据库建立连接的一种常见方式是建立起一个JDBC-ODBC桥接器。由于ODBC驱动程序被广泛使用,建立这种桥接器后,使得JDBC有能力访问几乎所有类型的数据库。JDBC也可以直接加载数据库驱动程序来访问数据库。如果使用JDBC-ODBC桥接器访问数据库,事先必须设置数据源。,DBC桥接器,直观的理解:一个数据源就是一个数据库。为了要链接到这个数据库,需要建立一个JDBC-ODBC桥接器,即加载桥接器驱动程序。Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);其中,Class是包java.lang中的一个类,该类通过调用它的静态方法forName就可以建立JDBC-ODBC桥接器。建立桥接器可能发生异常,所以建立桥接器的标准是:tryClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);catch(ClassNotFoundExceptione),查询记录,要查询数据库中的记录,必须和数据库建立连接。由于是以JDBC-ODBC方式访问数据库,就要与数据源建立连接。,连接到数据库,首先使用包java.sql中的Connection类声明一个对象,然后再使用类DriverManager调用它的静态方法getConnection创建这个连接对象。Connectioncon=DriverManager.getConnection(“jdbc:odbc:数据源名字”,”loginname”,”password”);如果还没为数据源设置loginname和password,则连接形式是:Connectioncon=DriverManager.getConnection(“jdbc:odbc:数据源名字”,”,”);,向数据库发送SQL语句,首先使用Statement类声明一个SQL语句对象,然后通过刚才创建的连接数据库的对象con调用方法createStatment()创建这个SQL语句对象。tryStatementsql=con.createStatment();catch(SQLExceptione),创建了Statement接口的实例后,可调用其中的方法执行SQL语句,JDBC中提供了三种执行方法,它们是execute()、executeQuery()和executeUpdate()。executeUpdate方法:这个方法一般用于执行SQL的INSERT、UPDATE或DELETE语句,当执行INSERT等SQL语句时,此方法的返回值是执行了这个SQL语句后所影响的记录的总行数。,Statement,executeQuery方法:一般用于执行SQL的SELECT语句。它的返回值是执行SQL语句后产生的一个ResultSet接口的实例(结果集)。execute方法:一般是在用户不知道执行SQL语句后会产生什么结果或可能有多种类型的结果产生时才会使用。execute()的执行结果包括如下三种情况:1.包含多个ResultSet(结果集);2.多条记录被影响;3.既包含结果集也有记录被影响。,Statement,ResultSet,ResultSet对象包含了Statement和PreparedStatement的executeQuery方法中SELECT查询的结果集,即符合指定SQL语句中条件的所有行。ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。结果集一般是一个表,其中有查询所返回的列标题及相应的值。,处理查询结果,有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中,即SQL语句对数据库的查询操作将返回一个ResultSet对象:ResultSetrs=sql.executeQuery(“SELECT*FROM成绩表”)ResultSet对象是由统一形式的列组织的数据行组成。ResultSet对象一次只能看到一个数据行,使用next()方法走到下一数据行。获得一行数据后,ResultSet对象可以使用getxxxx方法获得字段值,将位置索引(第一列使用1,第二列使用2等等)或字段名传递给getxxxx方法的参数即可。,ResultSet类的方法,driver,connection,Statement,ResultSet,close,注意次序!,顺序查询,使用结果集Result的next()方法,可以顺序地查询。一个结果最初将游标定位在第一行的前面,第一次调用next()方法使游标移动到第一行。Next()方法返回一个boolean型数据,当游标移动到最后一行之后返回false.,ex60,游动查询,有时需要在结果集中前后移动或显示结果集指定的一条记录等等。则需返回一个可滚动的结果集为了得到一个可滚动的结果集,需先获得一个Statement对象:Statementstmt=con.createStatement(inttype,intconcurrency);然后,根据参数type,concurrency取值情况,stmt返回相应类型的结果集:ResultSetre=stmt.executeQuery(SQL语句);,Type取值决定滚动方式,取值可以是:,ex61,随机查询,ex62,参数查询,ex63,排序查询,ex64,分析结果集查询,ex65,使用通配符查询,可以使用SQL语句操作符like进行模式般配,使用”%”代替一个或多个字符,用一个下划线”_”代替一个字符。例:rs.executeQuery(“select*fromstudentswhere姓名like王”),更新记录,用SQL语句更新记录中字段的值。Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的字段值的更新。,注意事项,可使用一个Statement对象进行更新和查询操作,但当查询语句返回结果集后,如果没有立即输出结果集的记录,而接着执行了更新语句,那么结果集就不能输出记录。要想输出记录就必须重新返回结果集。,ex66,添加记录,对于添加记录注意事项与上同删除记录,ex67,用结果集更新数据库中的表,尽管可以用SQL语句对数据库中的表进行更新,也可以使用内存中的ResultSet对象对底层数据库进行更新。,用结果集更新数据库中的表,步骤:由Connection对象调用如下方法,到一个可以更新底层数据库的Statement对象sql;Statement对象sql调用如下方法得到ResultSet对象rs:rs调用相应updateXXX方法对rs中所有的行的列值进行更新操作。例:将rs移动到第n行后,然后调用updateRow()方法,更新底层数据库表中的第n条记录。rs也可以调用rs.insertRow()方法将更新的结果集作为一条新的记录插入到底层数据库表中。如果rs的某列的值未被更新,那么插入到底层数据库表中的记录的相应字段值为null.,ResultSet对象常用的更新操作方法:,ex68,分页显示记录,假设总记录为m,每页显示数量是n,那么总页数的计算公式是:如果m除以n的余数大于0,总页数等于m除以n的商加1;如果m除以n的余数等于0,总页数等于m除以n的商;如果准备显示第p页的内容,应当把游标移动到第(p-1)*n+1条记录处。,ex69,连接数据库其他方法,连接Oracle可通过JDBC-ODBC桥接器和Oracle数据库建立连接,但这种连接质量依赖于ODBC.,查询excel电子表,可以通过JDBC-ODBC桥接器访问Excel电子表格。,ex70,使用同步连接,数据库操作中,建立连接是耗时最大的操作之一。如果客户访问的是同一数据库,那么为每一个客户建立一个连接是不合理的。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程而不是一个进程,这些线程由Web服务器进程来管理,它们共享JSP页面的成员变量。在处理多线程问题时,可将线程共享的变量放入一个synchronized块,或将修改该变量的方法用synchronized来修饰,这样,当一个客户用synchronized块或synchronized方法修改一个共享变量时,其他线程必须等待,直到该线程执行完该方法或同步块。这样可把connection对象作为一个成员变量被所有的客户共享,第一个访问数据库的客户负责建立连接,以后所有客户共享这个连接。,ex71,网上投票,ex72,String的长度是不可变的,StringBuffer的长度是可变的。如果对字符串中的长度经常进行操作,特别是内容要修改时,使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。,数据库连接池,在基于数据库的Web系统中,如果在较短的时间内,访问数据库的请求量不大但随着请求数不断增加,系统的开销越来越大,响应Web请求的速度越来越慢,就会导致系统无法响应Web请求。,造成这种结果的原因是由于传统数据库访问模式存在下面的一些缺陷:每次数据库请求都需要建立一次数据库连接,而每建立一次数据库连接就需要花费0.05s1s的时间,这个时间相对于数据库本身的操作时间和软件本身的执行时间来说,是非常漫长的。由于没有对连接数据库的连接数量进行控制,因此可能出现超出数据库处理能力的连接数量和处理请求,导致系统的崩溃。单独管理每一个连接,并进行使用后的资源回收。在这种方式下,如果某些连接出现了异常,导致无法正常关闭连接,那么将会导致资源的严重浪费甚至数据库服务器的内存泄漏。由于以上的缺点,开发人员设计出一种叫做“连接池”的技术,来处理传统连接方式带来的问题。,连接池的基本原理,在应用共享资源的开发中,有一个很著名的设计模式:资源池(ResourcePool)。该模式正是为了解决资源的频繁分配释放所造成的一系列问题而设计的。在数据库领域,这个设计模式的很重要的应用就是数据库连接池。,连接池的基本原理,数据库连接池的基本思想就是为数据库连接建立一个“存储池”。数据库建立初期,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“连接池”中申请一个,使用完毕之后再将该连接作为公共资源保存在“连接池”中,以供其他连接申请使用。,当需要连接时,就不用再需要重新建立连接,这样就在很大程度上提高了数据库连接处理的速度;同时,还可以通过设定连接池最大连接数来防止系统无控制的与数据库连接;更为重要的是可以通过连接池管理机制监视数据库的连接的数量以及各连接的使用情况,为系统开发测试及性能调整提供依据。,除了向连接池请求分配数据库连接之外,由于不能使用同一个连接次数过多,连接池还负责按照一定的规则释放使用次数较多的连接,并重新生成新的连接实例。保持连接池中所有连接的可用性。,在Tomcat中配置连接池,在Tomcat5.5下配置数据库连接池的步骤,以连接MSSQLServer数据库为例:1、首先是确保Tomcat安装目录的commonlib目录(或者是webappsyourwebWEB-INFlib目录,具体位于哪个目录,根据实际应用情况而定)中已经包含了JDBC连接数据库所必须的三个jar文件。,将JDBC驱动器安装后的lib目录下的三个jar文件拷贝到Tomcat安装目录的common/lib目录下即。这样在JSP页面中使用数据库连接时,就可以使用JDBC驱动中提供的接口和类。,2、修改Tomcat安装目录的conf子目录中的server.xml文件,在元素中添加如下的内容,用以配置连接数据库的各项信息:,每个字段都有自己的含义:,name:定义数据库连接的名称。driverClassNam:指定JDBC驱动器的类。username:表示登陆数据库时使用的用户名。password:为登陆数据库的密码。maxIdle:为数据库连接的最大空闲时间。超过此空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。maxWait:表示最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。maxActive:表示连接池的最大数据库连接数。设为0表示无限制。url:表示的是需要连接的数据库的地址和名称。,需要注意的一个问题是,在测试使用的数据库中,需要为此处使用的用户名指定相应的权限。,3、修改Tomcat安装目录的conf子目录中的context.xml文件,在元素中加入以下内容:元素代表一个Web应用,连接池需要读取该元素中的信息完成数据库的连接。有关server.xml中各类元素的具体含义和基本配置方式,自行查阅。,可以使用如下的文件来测试对于数据库连接池的配置是否正确:,ex73,使用连接池访问数据库的实例,ex74,PreparedStatement,PreparedStatement接口是Statement接口的子接口,它直接继承并重载了Statement的方法。PreparedStatement接口的常用方法见图6-5。,图6-5PreparedStatement接口的常用方法,创建PreparedStatement对象形式如下:PreparedStatementpsm=con.prepareStatement(INSERTINTOusers(u_name,u_pass)VALUES(?,?);输入参数的赋值PreparedStatement中提供了大量的setXXX方法对输入参数进行赋值。根据输入参数的SQL类型应选用合适的setXXX方法。,PreparedStatement,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!