欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载  

    第7单元 用JDBC访问数据库.ppt

    • 资源ID:11934576       资源大小:3.24MB        全文页数:45页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第7单元 用JDBC访问数据库.ppt

    学习内容: 了解JDBC数据库访问技术和JDBC的常用接口 掌握JDBC数据库驱动程序的获取和安装 掌握使用JDBC访问数据库的方法 掌握JSP、Servlet、JavaBean中数据库的连接和操作 理解连接池和数据源的概念 掌握连接池典型编程方法,第7单元 用JDBC访问数据库,JDBC概述,用JDBC访问数据库,DAO与数据库连接池,什么是JDBC,JDBC是Java数据库连接(Java DataBase Connectivity)技术的简称, 由一组用Java语言编写的类和接口组成。 JDBC是一组独立于特定数据库管理系统的、通用的SQL数据库存取和操作的公共接口(在java.sql和javax.sql包中)。 JDBCTM本身是个商标名而不是一个缩写字; JDBC由JavaSoft公司(Sun公司负责开发Java产品的业务单位)同数据库及数据库工具厂家一起建立的独立于DBMS的机制; JDBC为工具/数据库开发人员提供了一个标准的API, 使他们能够用纯Java API来编写数据库应用程序。 JDBC的设计目标: JDBC是一种规范, 最主要的设计目的是让各个数据库开发商为Java程序员提供标准的数据库访问的类和接口; 不必在不同的系统平台下编写不同的数据库应用程序。 对不同DBMS管理的数据进行一致的操作,而不必关心其存储格式; 可以使用Java语言来编写完整的数据库方面的应用程序。,JDBC的优缺点,JDBC的优点: 可移植性强: JDBC支持多种关系型数据库, 只需用JDBC API编写一个程序即可访问不同的数据库; JDBC使程序员不关注驱动程序的编写, 完全专著业务逻辑的开发。 可以用JDBC-ODBC桥驱动器将JDBC函数调用转换为ODBC; JDBC接口是面向对象的, 开发人员可以将常用的方法进行二次封装, 从而提高代码的重用性。 JDBC缺点: 通过JDBC访问数据库时, 实际的操作速度会降低。 虽然JDBC编程接口是面向对象的,但通过JDBC访问数据库仍然是面向关系的。 JDBC提供了对不同厂家的数据库产品的支持, 这样对数据源的操作有所影响。 与ODBC相比, JDBC没有定制的数据源的概念, 而是直接在应用程序中加载驱动程序并连接特定的数据库。,ODBC体系结构,ODBC(开放数据库互连): 微软为实现异构数据库互连而推出的一种标准, 它是一个单一的、公共的编程接口。 ODBC的体系结构含有四个部件: 应用程序Application:执行ODBC函数调用和处理,提交SQL语句并检索结果。 驱动程序管理器Driver Manager: 为应用程序装载驱动程序。,驱动程序Driver接口:实现ODBC函数调用和同数据源交互作用的动态连接库,执行ODBC函数调用提交SQL请求到指定的数据源,并把结果返回给应用程序。 需要时, 驱动程序也可改变应用程序请求, 以和特定DBMS的语法匹配。 数据源Data Source: 由需要交互的数据和与之相连的OS、DBMS及存取DBMS的网络平台组成。,JDBC体系结构,JDBC接口(API)也包括两个层次(与ODBC相类似): 面向应用的API(Java API抽象接口): 供应用程序开发人员使用 包括: 连接数据库、执行SQL语句、获得结果 面向数据库的API(java Driver API): 供数据库厂商实现相应的数据库驱动程序(驱动程序是实现了java.sql.Driver接口的类)。,加载某个数据库驱动程序类时,将创建相应的实例并向java.sql.DriverManage类注册该对象。其执行过程如下:,JDBC驱动程序的类型,JavaSoft定义了四种JDBC驱动程序的基本类型。 建议使用:JDBC-ODBC桥驱动程序,数据库协议驱动程序; 不建议使用:网络协议驱动程序,本地Java驱动程序。,数据库协议驱动程序: 驱动程序用于与数据库客户端API进行通信(代替JDBC-ODBC桥) 性能会比桥略好,是一种低成本数据库解决方案,许多厂商将该类驱动程序捆绑在其产品中。,JDBC-ODBC桥驱动程序: 将JDBC翻译成ODBC后, 再用ODBC驱动程序与数据库通信。 仅用于: 有ODBC驱动程序但没有提供JDBC驱动程序的数据库系统; 或已使用ODBC的低成本数据库解决方案。,纯Java类库的驱动程序,网络协议驱动程序: 将JDBC命令转换为与数据库系统无关的网络协议,并发送给一个中间件服务器。 中间件服务器再将该网络协议, 转换为特定数据库系统的协议, 并发送给数据库系统。 从数据库系统获得的结果, 先发送给中间件服务器, 并进而返回给应用程序。,本地Java驱动程序: 纯Java的驱动程序, 直接与特定的数据库系统通信;即驱动程序将JDBC请求直接翻译成特定DBMS协议。 优点:没有中间的转换或者是中间件。 通常用于提高数据库访问的性能。,JDBC的主要功能,JDBC API多集中在java.sql包中, 按功能可分为6类: 管理连接数据源: DriverManager, Driver, Connection 发送SQL语句: Statement, PreparedSatement, CallableStatement 获取查询的结果集: ResultSet 用于匹配SQL数据类型与Java数据类型 用于获取数据库元数据: DatabaseMetaData 提供了异常处理功能: SQLException,JDBC的主要使用步骤,使用JDBC技术的主要步骤为: (1) 注册或加载JDBC驱动程序;(2) 建立与数据库的连接; (3) 发送SQL语句;(4) 处理返回结果;(5) 关闭数据库相关资源,与上述操作相关的类或接口: Java.sql.DriverManager: 注册驱动程序,并获取数据库连接 Java.sql.Connection:完成对某一指定数据库的联接 Java.sql.Statement: 执行SQL语句并返回结果集;有两个子接口: Java.sql.PreparedSatement:用于执行预编译的sql声明 Java.sql.CallableStatement:用于执行数据库中存储过程的调用 Java.sql.ResultSet:对于给定声明取得结果的途径,注册和加载驱动器,1.加载连接数据库的驱动程序类 任何一种数据库驱动程序都要提供一个实现java.sql.Driver接口的驱动类,在加载数据库驱动类时,创建相应的实例对象并向java.sql.DriverManage类注册该实例对象。 将JDBC加到Build Path:,为程序加载驱动器类: 一般用Class.forName()方法显式地加载一个驱动程序类,由驱动程序负责向DriverManager注册; 新加载的驱动类都通过调用DriverManager类中的registerDriver()方法进行自动注册。,获取与数据库的连接,2. 创建与数据源的连接: 数据源的URL: jdbc:database locator 其中:jdbc要使用JDBC;Subprotocal驱动程序类型 database locator:网络数据库的主机名、端口和数据库名等,获取数据库连接的元数据,通过java.sql.DatabaseMetaData接口可获得数据库的整体综合信息,典型数据库驱动程序,使用JDBC-ODBC桥连接数据库,创建ODBC连接: 打开ODBC数据源管理器, 增加新的数据源。,编写程序,小结,JDBC是一个独立于特定数据库管理系统的、通用的SQL数据库存取和操作的公共接口; JDBC定义了用于访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源, 象ODBC一样,JDBC对开发者屏蔽了一些细节问题。 JDBC使应用程序开发人员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统, 这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。,用JDBC访问数据库,访问数据库的数据,访问数据库中的数据分为三种方式: Statement: 执行无参数的静态SQL语句 PreparedStatement: 执行带或不带IN参数的预编译SQL语句; CallableStatement: 执行存储过程调用。,接口Statement Statement接口常用的执行SQL语句的方法:,接口Statement使用示例,Statement应用要点,Statement应用要点 JDBC编译时并不对将要执行的SQL查询语句作任何检查, 仅将其作为一个String对象, 直到驱动程序执行SQL查询语句时才检查否正确; 若出现错误, 执行时将会产生 SQLException; 一个Statement对象在同一时间只能打开一个结果集, 对第二个结果集的打开隐含关闭第一个结果集; 若想对多个结果集同时操作, 必须创建多个Statement对象,在每个Statement对象上执行SQL查询语句以获得相应的结果集; 若不需要同时处理多个结果集, 则可以在一个Statement对象上顺序执行多个SQL查询语句, 对获得的结果集进行顺序操作; 注意:必须将JDBC驱动程序包加到项目classpath中。 在使用Statement时,可能引发SQL注入的问题。,使用Statement要注意引发SQL注入,预编译PreparedStatement对象,用PreparedStatement对象可多次执行一个SQL语句 PreparedStatement对象通过传递不同参数值多次执行同一SQL 语句, 可得到多个不同的结果。 PreparedStatement的实现机制: 使用PreparedStatement对象执行Sql命令时,Sql被DBMS进行解析和编译, 然后放到命令缓冲区; 每当执行同一个PreparedStatement对象时, 就被再解析一次, 但不被再次编译。 在大量用户的企业级应用中, 使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。 executeUpdate(String sql):能执行添加(insert)、修改(update)和删除(delete)的SQL语句, 执行成功将返回所影响记录的行数。 executeQuery(String sql): 将执行查询(select)语句, 成功后, 返回一个存储所有满足查询条件的数据库记录的ResultSet对象。 在该对象的sql语句中可用?作为参数的占位符; 执行前, 必须为每个问号?设置参数值。 通过setXxx()方法可设置参数, 其中Xxx是与参数对应的类型。,预编译PreparedStatement使用示例,结果集ResultSet对象,Statemn接口的executeQuery()方法, 返回一个ResultSet类型的结果集, 其中为所有满足查询条件的数据库记录。 ResultSet的基本处理方法: ResultSet对象中不仅包含满足查询条件的记录,还可以获得数据表的相关信息, 如每列的名称、列的数量等。 ResultSet对象维持一个指向当前行的指针。最初,指针指向第一行之前,ResultSet对象的next()方法使指针移向下一行。 第一次, 使用next()方法时将指针指向结果集的第一行; next方法返回是一个boolean值,若为true,则成功移向下一行; 若返回false则没有下一行。 getXxx法可以从某一列中获得结果; 其中: Xxx是java数据类型; 获取结果集中的数据可用两种方法获得: 通过列名来获取某个字段的数据。 通过列的索引(从1开始)获取某个字段的数据 。,ResultSet示例方法演示,ResultSet示例多结果集演示,数据类型和转换,数据类型一般转换规则: 对于getXXX()方法, JDBC驱动程序试图将基本数据转换成指定Java类型, 然后返回适合的Java值。 例如: 如果为getString()方法, 而数据库中数据类型为VARCHAR,则JDBC驱动程序将把VARCHAR转换成Java String。GetString()的返回值将为Java String 对象。 再如: 除getBytes()和getBinaryStream()外的任何getXXX()都可用于获取LONGVARCHAR值, 但推荐按返回的类型使用getAsciiStream()或 getUnicodeStream()方法。 方法getObject()将任何数据类型返回为Java Object。 对非常大的值使用流: 对很大的字符数据(longvarchar)或二进制数据(longvarbinary) 可通过输入让ResultSet类返回java.io.InputStream来完成。 getBinaryStream():返回对字段不进行任何转换的字节而流。 getAsciiStream():返回字段的单字节ASCII字符的流。getUnicodeStream():返回字段的双字节Unicode字符流。,数据库存储过程调用,用CallableStatement对象能以标准形式调用存储过程: 所有的关系数据库都可以用该接口的对象以标准形式调用储存过程;该对象调用存储过程有两种形式: 不带结果参数的形式:call 过程名(?,?,.) 带结果参数的形式:? = call 过程名(?, ?, .) 其中:结果参数是一种输出参数,是储存过程的返回值。 两种形式都可带多个输入、输出参数, 问号用作参数的占位符 处理存储过程接口的使用步骤: 用Connection类的prepareCall()创建CallableStatement对象。 如:CallableStatement cst=con.prepareCall(call proDemo(?); 设置输入参数: 通过setXXX()方法给CallableStatement设置 注册输出参数: 执行该对象前必须注册各输出参数的JDBC类型 注册JDBC 类型用registerOutParameter()方法完成。 语句执行完后,CallableStatement的getXXX()方法将取回参数值。 其中存储过程的返回值也作为输出参数。,存储过程调用示例,为数据库建立存储过程如下:,调用数据库存储过程:,事务处理,事务:一组组织在一起的数据库操作序列(多个SQL语句) 同一事务中的操作要么全做, 要么全不做, 才能保证数据库的一致性和完整性,因此是个不可分割的工作单位。 数据库事务的ACID特性: 原子性(atomicity): 指事务执行单元是一个不可分割的单元,这些单元要么都执行,要么都不执行。 一致性(consistency): 指无论执行了什么操作,都应保证数据的完整性和业务逻辑的一致性。 隔离性(isolation)或称为事务的串行化: 指事务执行过程中不存在当前所处理数据正被另一事务处理的情况。 持久性(durability): 指事务结束后, 执行单元操纵的数据被保存在数据库中, 这些数据的保存状态是永久性的, 即使数据库系统崩溃, 数据也不会消失。 默认情况下, JDBC的新连接处于自动提交模式。,JDBC中的事务处理,JDBC中的事务处理有两种方式: 自动提交: 每当执行完一条SQL时就会提交事务; 手动提交: 必须用Connection接口的commit()方法才提交, 或用rollback()回滚事务, 以使当前事务结束, 另一事务随即开始。 用Connection的setAutoCommit()可设置事务提交方式 void setAutoCommit(booleanautoCommit) 参数:为true启用自动提交模式;为false禁用自动提交模式 void commit():提交事务 使所有上一次提交/回滚后进行的更改持久化,并释放此Connection 对象当前持有的所有数据库锁。 此方法只应该在已禁用自动提交模式时使用。 void rollback():回滚事务 取消在当前事务中进行的所有更改, 并释放此Connection对象当前持有的所有数据库锁。 此方法只应该在已禁用自动提交模式时使用。,事务处理示例自动提交,事务处理示例手动提交,JDBC对事务管理级别,JDBC的事务隔离级别: Connection对象的setTransactionLevel()方法可指定事务级别。,低隔离级别: 可增强多用户同时访问数据的能力, 但增加了用户可能遇到的并发副作用(如脏读或丢失更新)的数量。 高隔离级别: 能减少用户遇到并发副作用的类型, 但需更多的系统资源, 并增加了一个事务阻塞其他事务的可能性。,小结:,三种执行SQL语句的方法 executeQuery()返回执行后的单个结果集,所以通常用于SELECT语句。 executeUpdate()返回一个整数, 指示受影响的行数(即更新计数)。 execute()返回一个boolean值, 该方法执行后可以得到多个结果集、多个更新计数或二者的组合。,DAO和数据库连接池,为什么需要DAO模式,多层结构系统的主要特点: 安全性: 中间层隔离了客户对数据库服务器的访问, 保护了数据库的安全。 易维护性: 由于业务逻辑位于单独的一层,当业务规则发生变化后, 客户端程序基本不作改动。 快速响应: 通过负载均衡及中间层缓冲数据, 可提高对客户端的响应速度。 系统扩展灵活: 基于多层分布式式结构, 当业务增大时, 可在中间层部署更多的应用服务器, 提高对客户端的响应, 而所有变化对客户透明。,DAO(Data Access Object)数据访问对象: DAO与数据库或数据文件等持久层打交道,夹在业务逻辑与数据库资源中间,专门用于数据处理。,DAO模式,DAO模式是标准J2EE设计模式之一,开发人员使用这种模式将底层数据访问操作与高层业务逻辑分开。 一个典型的DAO实现有以下组件: DAO工厂类:创建DAO实例 DAO接口:用于外层与数据访问层隔离 实现DAO接口的类:对外层隐藏底层数据库访问细节 数据传输对象DTO:用于与客户交换数据 DAO模式的优点: 利用接口实现松耦合; 简化数据移植; 降低了业务对象中代码的复杂度; 对持久化数据实现透明访问; 对数据库结构提供面向对象的视图和封装; 将所有数据访问代码组织到一个独立的层次中。,DAO设计模式实现实例,DAO工厂的实现,用JDBC的DAO工厂 使用环境: 1.底层采用JDBC进行数据库操作, 而且针对同一个数据库 2.同一工厂实例创建的各DAO是同一个链接, 以节省链接资源 3.对各个DAO的操作提供同一个事务 4.对该事务提供提交、回滚操作 5.提供关闭链接的方法,数据库连接池,数据库连接池: 当服务器启动时, 预先建立一定数量的数据库连接, 并将其置于数据库连接池中, 并一直维持不少于此数目的连接。 当客户端需要操作数据库时,数据库连接池会返回一个未使用的连接并将其标记为忙。当客户端操作完数据库,将所使用的链接交还给链接池,并将连接标记为空闲。,连接池的分配与释放,对系统的性能有很大的影响。 系统首先分配空闲的、建立时间最长(通过容器的顺序存放实现)的、有效的连接进行分配; 无空闲连接时若未达到最大连接数(maxConn), 就新建一个连接; 若已达到就等待一定时间(timeout), 有连接被释放时即分配, 否则返回空值。,Tomcat连接池的实现,配置数据源 在Tomcat安装目录下的confserver.xml文件中配置 或在Web工程下的META-INFcontext.xml文件中配置 在context.xml中配置数据源代码(Tomcat 5.5以上版本)如下:,标记各个属性解释: name: 连接池对象绑定到JNDI上的名字(自由命名) driverClassName: 连接数据库的驱动程序;url:连接数据库路径 maxActive: 连接池的最大数量;maxIdle: 最大空闲连接数,-1不限制 maxWait: 最长等待连接时间,单位:毫秒, 即置成-1表示不确定 username、password:连接数据库使用的帐号与密码,获取连接,数据库连接池的优缺点,数据库连接池的优点 服务器为客户端请求数据而与数据库建立连接时,会耗费一定的系统资源,如果服务器为每一次交易都建立独立的连接将加重服务器的负担,严重时会导致服务器崩溃。而采用连接池技术,将预先建立的连接分配给客户端的请求,一方面缩短了服务器响应时间,另一方面通过池化管理减轻了服务器负担。 数据库连接池的缺点 服务器启动时就会创建一定数量的数据库连接,事实上,这些连接都在等待服务器为其分配客户端的请求,当请求数目远远少于连接数目时,就会导致许多空连接,它们消耗了一定的系统资源。,

    注意事项

    本文(第7单元 用JDBC访问数据库.ppt)为本站会员(PIYPING)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开