收藏 分享(赏)

第11章 数据库编程.ppt

上传人:gnk289057 文档编号:9048236 上传时间:2019-07-22 格式:PPT 页数:32 大小:946.50KB
下载 相关 举报
第11章 数据库编程.ppt_第1页
第1页 / 共32页
第11章 数据库编程.ppt_第2页
第2页 / 共32页
第11章 数据库编程.ppt_第3页
第3页 / 共32页
第11章 数据库编程.ppt_第4页
第4页 / 共32页
第11章 数据库编程.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、JDBC基础JDBC驱动程序JDBC编程JNDI与连接池,第十一章 JDBC与数据库编程,JDBC基础 什么是JDBC,JDBC(Java Database Connectivity)是独立于特定数据库管理系统的、通用的SQL数据库存取和操作的公共接口(一组Java API),使应用程序开发人员无需对特定的数据库系统的特点有过多的了解。JDBC定义了用来访问数据库的标准Java类库(在java.sql包中) ,使用这个类库可以以一种标准的方法、方便地访问数据库资源。,JDBC基础 关于ODBC,ODBC的体系结构含有四个部件: 应用程序(Application):执行ODBC函数的调用和处理,

2、提交SQL语句并检索结果。 驱动程序管理器(Driver Manager):为应用程序装载驱动程序。 驱动程序(Driver):驱动程序是实现ODBC函数调用和同数据源交互作用的动态连接库,它执行ODBC函数调用,提交SQL请求到指定的数据源,并把结果返回给应用程序。 数据源(Data Source):由用户需要存取的数据和与之相连的操作系统、DBMS及存取DBMS的网络平台组成。,ODBC是为了实现异构数据库互连而由Microsoft公司推出的一种标准,它是一个单一的通用的数据库编程接口。ODBC提供不同的程序以存取不同的数据库,但只提供一种应用编程接口(API)给应用程序。,ODBC,JD

3、BC 基础,与ODBC相类似,JDBC接口(API)也包括两个层次:面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。,与ODBC相比,JDBC没有了定制的“数据源”的概念,而是直接在应用程序中加载驱动程序并连接特定的数据库。,JDBC驱动程序类型,JDBC支持四种类型的驱动程序:Type 1。JDBC-ODBC 桥, 加 ODBC driver JDBC 方法 - 转换 为ODBC 方法 - 本地化方法 Type 2。本地化方法实现JDBC APIJD

4、BC 方法 - 本地化方法 Type 3。通过中间件JDBC 方法 - 中间件-本地化方法 Type 4。纯JAVA实现JDBC驱动JDBC 方法 - JAVA语言直接编写的数据库驱动,JDBC驱动程序,JDBC-ODBC Bridge, plus ODBC driver (Type 1) 由 Sun的Java2 JDK提供(sun.jdbc.odbc.JdbcOdbcDriver) 通过ODBC驱动程序来获得对数据库的JDBC访问 必须先安装ODBC驱动程序和配置ODBC数据源。 仅当特定的数据库系统没有相应的JDBC驱动程序时使用。,JDBC驱动程序,Native-API, partly

5、Java driver (Type 2) Native-API driver 将JDBC命令转换为特定数据库系统的本地库方法。 与Type1相类似,必须先安装特定数据库的库方法(二进制代码,非Java)。,JDBC驱动程序,JDBC-net, pure Java driver (Type 3) 将JDBC命令转换为与数据库系统无关的网络协议,并发送给一个中间件服务器。 中间件服务器再将数据库系统无关的网络协议转换为特定数据库系统的协议,并发送给数据库系统。 从数据库系统获得的结果先发送给中间件服务器,并进而返回给应用程序。,Native-protocol, pure Java driver (

6、Type 4) 纯Java的驱动程序,直接与特定的数据库系统通信。 直接将JDBC命令转换为数据库系统的本地协议。 优点:没有中间的转换或者是中间件。 通常用于提高数据库访问的性能。,Application Space,Java Application,Type 4 JDBC Driver,Database,SQL Command Using Proprietary Protocol,Result Set Using Proprietary Protocol,JDBC驱动程序,JDBC驱动程序,Driver Manager(java.sql.DriverManager)装载驱动程序,管理应用程

7、序与驱动程序之间的连接。Driver(由驱动程序开发商提供)将应用程序的API请求转换为特定的数据库请求。Connection(java.sql.Connection)代表应用程序到特定数据库的连接Statement(java.sql.Statement)在一个给定的连接中,用于执行一个静态的数据库SQL语句。ResultSet(java.sql.ResultSet)SQL语句中心完后,返回的数据结果集(包括行、列)。Metadata(java.sql.DatabaseMetadata; java.sql. ResultSetMetadata)关于查询结果集、数据库和驱动程序的元数据信息。,J

8、DBC常用类,JDBC基本工作步骤,1. 加载 JDBC 驱动:Class.forName(“driverName”);2. 建立数据库连接:DriverManager.getConnection(“jdbc:xxx:datasource”);3. 执行SQL语句:stmt = con.createStatement();stmt.executeQuery (“Select * from myTable”);4. 处理查询结果:while (rs.next() name = rs.getString(“name”);amount = rs.getInt(“amt”); ,JDBC基本工作步骤,

9、JDBC编程基本步骤,导入必须的包 加载JDBC驱动 由DriverManager及数据源得到一个数据库连接对象 由数据库连接对象创建一个 “Statement” 对象 用此 “Statement” 对象进行查询操作 查询结果由 “ResultSet” 对象保存 关闭 “ResultSet” 对象 关闭“Statement”对象 关闭“Connection”对象,JDBC 编程:1. 加载JDBC驱动程序,在应用程序中,有三种方法可以加载驱动程序:利用System类的静态方法setProperty() System.setProperty(“jdbc.drivers”, “sun.jdbc.o

10、dbc.JdbcOdbcDriver”);利用Class类的静态方法 forName() Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Class.forName(“oracle.jdbc.driver.OracleDriver”);直接创建一个驱动程序对象 new sun.jdbc.odbc.JdbcOdbcDriver();,利用DriverManager类的静态方法getConnection()来获得与特定数据库的连接实例(Connection实例)。Connection conn = DriverManager.getConnection

11、(database);Connection conn = DriverManager.getConnection(database, user, pwd); 使用不同的驱动程序与不同的数据库建立连接时,database的内容是不同的,但其格式是类似的,都包括三个部分:jdbc : driverType : dataSource对于JDBC-ODBC Bridge,driverType为odbc, dataSource则为ODBC数据源,例如:“jdbc:odbc:myDSN”。对于不同类型的驱动程序,根据数据库系统的不同driverType和dataSource有不同的格式和内容。,JDBC

12、编程:2. 建立与数据库的连接,JDBC 编程:3. 进行数据库操作 Statement,每执行一条SQL语句,都需要利用Connetcion实例的createStatement()方法来创建一个Statement实例。Statement接口的常用方法包括: 执行SQL INSERT, UPDATE 或 DELETE 等语句 int executeUpdate(String sql) /返回影响的行数 执行SQL SELECT语句 ResultSet executeQuery(String sql) 执行一个可能返回多个结果的SQL语句 boolean execute(String sql)

13、(与其他方法结合起来来获得结果) / 返回 true 如果第一个结果是 ResultSet 对象,3. 进行数据库操作 PreparedStatement,如果SQL命令串中有参数变量,需要使用PreparedStatement 接口 通过Connection的方法prepareStatement(String sqlcmd)创建 PreparedStatement的excuteQuery()和excuteUpdate()中无参数 PreparedStatement除继承Statement的方法外 具有一系列setXXX(int 参数序号, XXX 值)的方法,如: setInt(int, i

14、nt) setFloat(int, float) setString(int , String),JDBC 编程:4. 处理查询结果,通过ResultSet 接口来获得查询结果: ResultSet实例最初定位在结果集的第一行(记录) ResultSet提供了一些在结果集中定位的方法,如first(), last(), next(), previous(),relative(int rows)等。 ResultSet提供了一些方法来获得当前行中的不同字段的值,getXXX()。ResultSet中还提供了有关方法,来修改结果集,并提交到数据库中去。,JDBC 编程:4. 处理查询结果,方法参数

15、为: int 字段序号 或 String 字段名称,JDBC 编程: 4.增删改操作,通过Statement的excuteUpdate() 在返回的ResultSet中操作 修改记录 rs.absolute(5); rs.updateString(“NAME“, “AINSWORTH“); rs.updateRow();,在返回的ResultSet中操作,增加记录 rs.moveToInsertRow(); rs.updateString(1, “AINSWORTH“); rs.updateInt(2,35); rs.updateBoolean(3, true); rs.insertRow()

16、; rs.moveToCurrentRow();,JDBC 编程:获取结果集的元数据信息,通过ResultSetMetadata来获得查询结果的元数据信息: ResultSet提供了一个方法getMetadata()来获得结果集的元数据信息,它返回的是一个ResultSetMetadata实例。 通过ResultSetMetadata实例,就可以获得结果集中字段的详细信息,如字段总数,每个字段的名称、类型等。 getColumnCount() / # of columns in the row getColumnName( i ) / returns column name getColumn

17、Type ( i ) / returns column data type getColumnLabel ( i ) /suggested label for a column when print getTableName() /returns the name of the table 确定了字段类型,获取字段数据时,就可以明确如何使用ResultSet中的getXXX()方法了。,JDBC 编程:获取数据库的元数据信息,通过DatabaseMetadata来获得数据库的元数据信息: Connection类提供了一个方法getMetadata()来获得数据库的元数据信息,它返回一个Data

18、baseMetadata实例。 通过DatabaseMetadata实例,就可以获得数据库的各种信息,如数据库厂商信息、版本信息、数据表数目、每个数据表名称等。 getDatabaseProductName() getDatabaseProductVersion() getDriverName() getTables(),JDBC事务处理,一项事务是指由一条以上对数据库的更新SQL语句 所组成的不可分割的工作单元,只有当事务中所有 操作都正常完成 整个事务才能被提交到数据库, 只要有一项操作失败,就必须撤销整个事务。例如:张三要将自己的1000元转到李四帐上: update account s

19、et money=money-1000 where name=zhangsan; update account set money=money+1000 where name=lisi; 只有当以上两条SQL语句都成功执行,才能提交整个事务。,JDBC 事务处理,Connection类中提供了3个控制事务的方法: setAutoCommit(boolean autoCommit) /是否自动提交 commit() /提交事务 rollback() /撤销事务默认为自动提交,即每一条对数据库的更新SQL语句 代表一项事务,操作成功后,系统将自动调用commit() 来进行提交. 可以通过setA

20、utoCommit(false)禁止自动提交,然后把多条数据库 更新SQL语句作为一个事务。整个事务完成后再调用commit()整体 提交,Trycon=DriverManager.getConnection();con.setAutoCommit(false);stmt = con.createStatement();stmt.executeUpdate(“update account set money=money-1000 where name=zhangsan;”);stmt.executeUpdate(“update account set money=money+1000 wher

21、e name=lisi;”);mit(); catch(Exception e)e.printStackTrace();try con.rollback(); catch(Exception e)e.printStackTrace(); finallytrystmt.close(); con.close();catch(Exception ex)e.printStackTrace(); ,使用DataSource和数据库连接池,应用程序,connection1,connection2,connection3,数据库,connection1,数据库连接池,使用DataSource和数据库连接池,

22、Servelet或EJB容器一般均在配置文件中设置数据源(DataSource)配置,并在容器内部提供数据库连接池. 应用程序只需通过JNDI命名机制查找有关数据源(DataSource),通过数据源从数据库连接池中得到数据库连接.,JNDI 简介 (Java Naming and Directory Interface),简单的把JNDI理解为名字对象绑定机制,以文件系统来支持的JNDI服务是其中一种。,应用程序,JNDI API,名字对象,名字-对象,JNDI 服务,JNDI 简介,JNDI编程接口的支持类和接口在Javax.naming 包及其子包中. 所有命名操作均与Context类相关. Context 接口类表示一个naming context 一个Context含有一组(名字-对象)的绑定集合,JNDI 简介,Context 接口定义了一组检查和更新这些绑定的方法 InitialContext类是Context接口的一个实现类,它是进行命名操作的起始Context InitialContext对象的实现(创建)是运行时确定的,它取决于两个环境参数:Context.INITIAL_CONTEXT_FACTORY 和Context.PROVIDER_URL 前者定义了创建InitialContext类的工厂类,后者提供JNDI服务提供者需要的参数.,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报