版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JSP访问数据库,关系数据库,Access SQL server Oracle,数据库,DBMS,不同DBMS对底层数据有不同的操作方法, 为了隐蔽DBMS和数据操作的差异性,产生了 统一标准:SQL,SQL语言,Jdbc结构,SQL,driver,DBMS,将SQL调用转化为DBMS API调用,JDBC结构,Java.sql.,JDBC应用程序结构,三种常见的JSP通过JDBC访问数据库的方法 在JSP页面中直接访问数据库 在Servlet中访问数据库 通过JavaBean封装对数据库的访问,在JSP中可使用Java的JDBC技术,实现对数据库中表记录的查询、修改和删除等操作。 JDBC(
2、Java DataBase Connectivity)是Java数据库连接API。可完成三件事: 与一个数据库建立连接; 向数据库发送SQL语句; 处理数据库返回的结果,使用JDBC对数据库进行一次数据库操作需要进行如下的几个步骤: 载入JDBC驱动程序 定义连接使用的URL 建立连接 创建语句对象 执行数据库操作 处理结果 关闭连接,JDBC和数据库建立连接的一种常见方式是建立起一个JDBC-ODBC桥接器。由于ODBC驱动程序被广泛使用,建立这种桥接器后,使得JDBC有能力访问几乎所有类型的数据库。 JDBC也可以直接加载数据库驱动程序来访问数据库。 如果使用JDBC-ODBC桥接器访问数
3、据库,事先必须设置数据源,DBC桥接器,直观的理解:一个数据源就是一个数据库。为了要链接到这个数据库,需要建立一个JDBC-ODBC桥接器,即加载桥接器驱动程序。 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 其中,Class是包java.lang中的一个类,该类通过调用它的静态方法forName就可以建立JDBC-ODBC桥接器。建立桥接器可能发生异常,所以建立桥接器的标准是: try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); catch(ClassNotFoundException e),查
4、询记录,要查询数据库中的记录,必须和数据库建立连接。由于是以JDBC-ODBC方式访问数据库,就要与数据源建立连接,连接到数据库,首先使用包java.sql中的Connection类声明一个对象,然后再使用类DriverManager调用它的静态方法getConnection创建这个连接对象。 Connection con= DriverManager.getConnection(“jdbc:odbc:数据源名字”,”login name”,”password”); 如果还没为数据源设置login name和password,则连接形式是: Connection con= DriverMana
5、ger.getConnection(“jdbc:odbc:数据源名字”,”,”,向数据库发送SQL语句,首先使用Statement类声明一个SQL语句对象,然后通过刚才创建的连接数据库的对象con调用方法createStatment()创建这个SQL语句对象。 try Statement sql=con. createStatment(); catch(SQLException e,创建了Statement接口的实例后,可调用其中的方法执行SQL语句,JDBC中提供了三种执行方法,它们是execute()、executeQuery()和executeUpdate()。 executeUpdat
6、e方法 :这个方法一般用于执行SQL的INSERT、UPDATE或DELETE语句,当执行INSERT等SQL语句时,此方法的返回值是执行了这个SQL语句后所影响的记录的总行数,Statement,executeQuery方法 :一般用于执行SQL的SELECT语句。它的返回值是执行SQL语句后产生的一个ResultSet接口的实例(结果集)。 execute方法 :一般是在用户不知道执行SQL语句后会产生什么结果或可能有多种类型的结果产生时才会使用。execute()的执行结果包括如下三种情况: 1.包含多个ResultSet(结果集); 2.多条记录被影响; 3.既包含结果集也有记录被影响
7、,Statement,ResultSet,ResultSet 对象包含了Statement和PreparedStatement的executeQuery方法中SELECT查询的结果集,即符合指定SQL 语句中条件的所有行。 ResultSet.next 方法用于移动到 ResultSet 中的下一行,使下一行成为当前行。结果集一般是一个表,其中有查询所返回的列标题及相应的值,处理查询结果,有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中,即SQL语句对数据库的查询操作将返回一个ResultSet对象: Res
8、ultSet rs=sql.executeQuery(“SELECT * FROM 成绩表”) ResultSet对象是由统一形式的列组织的数据行组成。 ResultSet对象一次只能看到一个数据行,使用next()方法走到下一数据行。获得一行数据后, ResultSet对象可以使用getxxxx方法获得字段值,将位置索引(第一列使用1,第二列使用2等等)或字段名传递给getxxxx方法的参数即可,ResultSet类的方法,driver,connection,Statement,ResultSet,close,注意次序,顺序查询,使用结果集Result的next()方法,可以顺序地查询。一个
9、结果最初将游标定位在第一行的前面,第一次调用next()方法使游标移动到第一行。Next()方法返回一个boolean型数据,当游标移动到最后一行之后返回false,ex60,游动查询,有时需要在结果集中前后移动或显示结果集指定的一条记录等等。则需返回一个可滚动的结果集为了得到一个可滚动的结果集,需先获得一个Statement对象: Statement stmt=con.createStatement(int type, int concurrency); 然后,根据参数type, concurrency取值情况,stmt返回相应类型的结果集: ResultSet re=stmt.execut
10、eQuery(SQL语句,Type取值决定滚动方式,取值可以是,ex61,随机查询,ex62,参数查询,ex63,排序查询,ex64,分析结果集查询,ex65,使用通配符查询,可以使用SQL语句操作符like进行模式般配,使用”%”代替一个或多个字符,用一个下划线”_”代替一个字符。 例:rs.executeQuery(“select * from students where 姓名 like 王 ”,更新记录,用SQL语句更新记录中字段的值。 Statement对象调用方法: public int executeUpdate(String sqlStatement); 通过参数sqlStat
11、ement指定的方式实现对数据库表中记录的字段值的更新,注意事项,可使用一个Statement对象进行更新和查询操作,但当查询语句返回结果集后,如果没有立即输出结果集的记录,而接着执行了更新语句,那么结果集就不能输出记录。要想输出记录就必须重新返回结果集,ex66,添加记录,对于添加记录注意事项与上同 删除记录,ex67,用结果集更新数据库中的表,尽管可以用SQL语句对数据库中的表进行更新,也可以使用内存中的ResultSet对象对底层数据库进行更新,用结果集更新数据库中的表,步骤: 由Connection对象调用如下方法,到一个可以更新底层数据库的Statement对象sql; Statem
12、ent对象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除以
13、n的余数等于0,总页数等于m除以n的商; 如果准备显示第p页的内容,应当把游标移动到第(p-1)*n+1条记录处,ex69,连接数据库其他方法,连接Oracle 可通过JDBC-ODBC桥接器和Oracle数据库建立连接,但这种连接质量依赖于ODBC,查询excel电子表,可以通过JDBC-ODBC桥接器访问Excel电子表格,ex70,使用同步连接,数据库操作中,建立连接是耗时最大的操作之一。如果客户访问的是同一数据库,那么为每一个客户建立一个连接是不合理的。 当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程而不是一个进程,这些线程由Web服务器进程来管理,它们共享JSP页面
14、的成员变量。在处理多线程问题时,可将线程共享的变量放入一个synchronized块,或将修改该变量的方法用synchronized来修饰,这样,当一个客户用synchronized块或synchronized方法修改一个共享变量时,其他线程必须等待,直到该线程执行完该方法或同步块。 这样可把connection对象作为一个成员变量被所有的客户共享,第一个访问数据库的客户负责建立连接,以后所有客户共享这个连接,ex71,网上投票,ex72,String 的长度是不可变的,StringBuffer的长度是可变的。如果对字符串中的长度经常进行操作,特别是内容要修改时,使用StringBuffer,
15、如果最后需要String,那么使用StringBuffer的toString()方法,数据库连接池,在基于数据库的 Web系统中,如果在较短的时间内,访问数据库的请求量不大 但随着请求数不断增加,系统的开销越来越大,响应 Web请求的速度越来越慢,就会导致系统无法响应Web 请求,造成这种结果的原因是由于传统数据库访问模式存在下面的一些缺陷: 每次数据库请求都需要建立一次数据库连接,而每建立一次数据库连接就需要花费 0.05s1s的时间,这个时间相对于数据库本身的操作时间和软件本身的执行时间来说,是非常漫长的。 由于没有对连接数据库的连接数量进行控制,因此可能出现超出数据库处理能力的连接数量和
16、处理请求,导致系统的崩溃。 单独管理每一个连接,并进行使用后的资源回收。在这种方式下,如果某些连接出现了异常,导致无法正常关闭连接,那么将会导致资源的严重浪费甚至数据库服务器的内存泄漏。 由于以上的缺点,开发人员设计出一种叫做“连接池”的技术,来处理传统连接方式带来的问题,连接池的基本原理,在应用共享资源的开发中,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配释放所造成的一系列问题而设计的。在数据库领域,这个设计模式的很重要的应用就是数据库连接池,连接池的基本原理,数据库连接池的基本思想就是为数据库连接建立一个“存储池”。数据库建立初期,预先在缓
17、冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“连接池”中申请一个,使用完毕之后再将该连接作为公共资源保存在“连接池”中,以供其他连接申请使用,当需要连接时,就不用再需要重新建立连接,这样就在很大程度上提高了数据库连接处理的速度;同时,还可以通过设定连接池最大连接数来防止系统无控制的与数据库连接;更为重要的是可以通过连接池管理机制监视数据库的连接的数量以及各连接的使用情况,为系统开发测试及性能调整提供依据,除了向连接池请求分配数据库连接之外,由于不能使用同一个连接次数过多,连接池还负责按照一定的规则释放使用次数较多的连接,并重新生成新的连接实例。保持连接池中所有连接的可用性,在Tom
18、cat中配置连接池,在Tomcat5.5下配置数据库连接池的步骤,以连接MS SQLServer数据库为例: 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表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某铝业厂熔炼工艺管理规范
- 2026顶级大学面试题及答案
- 2026工会经费面试题目及答案
- 人工智能与证券行业监管的协同发展
- 2026护理类副高面试题及答案
- 交易行为建模与异常识别
- 人工智能模型可信度认证体系
- 人工智能在证券市场中的风险预警机制研究
- 人工智能在健康险定价中的优化策略
- 软件开发部年度述职报告
- 生态修复的讲解
- 抽奖中奖管理办法
- IPC6012DA中英文版刚性印制板的鉴定及性能规范汽车要求附件
- 科研项目负责人应承担的职责
- 院前创伤急救止血专家共识(2025年版)解读
- 2024年绿色金融知识竞赛考试题库
- 江苏省生活垃圾焚烧稳定化飞灰填埋处置技术标准DB32∕T 4076-2021
- 人防工程(防护密闭套管∕管道)隐蔽检查验收记录
- DBJ15-22-2021-T 锤击式预应力混凝土管桩工程技术规程(广东省)
- 中华人民共和国标准设计施工总承包招标文件(2012年版)
- 08SG115-1 钢结构施工图参数表示方法制图规则和构造详图
评论
0/150
提交评论