JDBC与java数据库编程

wangydream

贡献于2015-04-08

字数:0 关键词: JDBC Java开发

3 Sept. 2008 © Neusoft Confidential JDBC与JAVA数据库编程 东软人才实训中心 Copyright 2008 By Neusoft Group. All rights reserved 3 Sept. 2008 Confidential 课程目标 • 培训目标: – 具备使用Java连接到数据库的能力; – 掌握用JDBC进行数据库应用程序的开发; – 掌握用JDBC操作数据库的能力; 3 Sept. 2008 Confidential 课程结构 内容 课时(H) 第一章: JDBC 的概念 1 第二章: JDBC 基础应用 2.5 第三章: JDBC 高级应用 2.5 3 Sept. 2008 Confidential 第一章: JDBC 的概念 学时:1学时 教学方法:讲授ppt 目标: 本章旨在向学员介绍JDBC 的概 念,通过本课的学习,学员应该 掌握如下知识: 1)了解JDBC的体系结构 2)掌握java.sql包中常用的基 本的 JDBC API 3 Sept. 2008 Confidential 1.1 JDBC 是什么 DBMS Java 数据库应用程序 客户机 DBMS 独有的协议 数据库服务器 JDBC • JDBC(Java DataBase Connectivity)Java 数据库连接, 主要提供编写 Java 数据库应用程序的 API 支持。 3 Sept. 2008 Confidential 1.1 JDBC 是什么 • JDBC提供了执行SQL语句来操作关系数据库的手段。JDBC 被设计成一个基于Java的面向对象应用编程接口以便于数据 访问,并成为一个java开发人员和数据库厂商可以遵循的一个 标准。 • 这个包的实现位于java.sql包中。它是类和接口的一个集合, 而这些类和接口提供了存取多种数据库的一个统一API。 • JDBC包的设计目的是成为执行SQL语句的接口,而不是用于 数据存取的一个高级抽象层。 • JDBC应用程序与正在使用中的数据库管理系统的具体特征得 到了充分的隔离,因此设计人员不必为具体数据库而重新设计 它。 3 Sept. 2008 Confidential 1.1 JDBC 是什么 • JDBC是用于执行SQL语句的Java应用程序接口,是一套API 集合,在这个集合中设置了许多允许Java程序连接数据库的 框架。JDBC由一组用java语言写成的类和接口组成,是一种 连接不同数据库的规范,其宗旨是让各数据库开发商为java程 序员提供标准的数据库访问类和接口。JDBC与Java结合,使 用户可以很容易地把SQL语句传送到任何关系型数据库中,程 序员用它编写的数据库应用程序,可以在各种数据库系统中运 行。 • 因为java是跨平台的,所以JDBC也具有跨平台性 。 3 Sept. 2008 Confidential 1.2 JDBC 实现的功能 • 创建和管理与数据源的连接 • 发送 SQL 命令至数据源 • 提取并处理由数据源返回至应用程序的结果集 3 Sept. 2008 Confidential 1.3 JDBC体系结构图 Java数据库应用程序 JDBC API JDBC Driver Interface 客户机 DBMS独有的协议 数据库服务器DBMS 3 Sept. 2008 Confidential 1.3 JDBC 的体系结构 • JDBC的结构可划分为两层: – JDBC 驱动程序管理器接口:是底层的驱动程序 层(JDBC Driver API),处理与具体驱动程序版 本的所有通信。 – JDBC API:一个是面向程序开发人员的应用程 序层,开发人员用API通过SQL调用数据库和取 得结果。 3 Sept. 2008 Confidential 1.4 数据库驱动程序 目前的JDBC驱动程序有可以分为以下四大类: (1)JDBC-ODBC Bridge Driver,将JDBC首先翻译为 ODBC,然后使用ODBC驱动程序和数据库通信。 (2)Native API Driver,由部分JAVA程序和部分本地代码组 成,利用开发商提供的本地库函数来直接与数据库通讯。 (3)JDBC-Net Driver,纯java程序,它使用一种与具体数据 库无关的协议将数据库请求发送给一个中间服务器。 (4)Native Protocol Driver,纯java的驱动程序,直接与特定 的数据库系统通信。直接将jdbc命令转换为数据库系统的本 地协议。 通常开发中多采用第四种方式,他的使用更加的直接和简便。 3 Sept. 2008 Confidential 1.4 数据库驱动程序 JDBC-ODBC Bridge Driver 适用于快速的原型系统,没有提供jdbc驱动的数据库,如access 3 Sept. 2008 Confidential 1.4 数据库驱动程序 Native API Driver 利用开发商提供的本地库来直接与数据库通信,比type1性能略好。 3 Sept. 2008 Confidential 1.4 数据库驱动程序 JDBC-Net Driver 具有最大的灵活性,通常由那些非数据库厂商提供,是 四种类型中最小的。 3 Sept. 2008 Confidential 1.4 数据库驱动程序 Native API based 最高的性能,通过自己的本地协议直接与数据库引擎通信,具 备在internet装配的能力。 3 Sept. 2008 Confidential 1.5 JDBC优缺点 优点: (1) JDBC API与ODBC(Open Data Base Connectivity)十分相似,有 利于用户理解。 (2) JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来, 可以致力于应用程序中的关键地方。 (3) JDBC支持不同的关系数据库,这使得程序的可移植性大大加强。 (4) JDBC API是面向对象的,可以让用户把常用的方法封装为—个类, 以备后用。 缺点: (1) 使用JDBC,访问数据记录的速度会受到一定程度的影响。 (2) JDBC结构中包含不同厂家的产品,这就给更改数据源带来了很大 的麻烦。 3 Sept. 2008 Confidential 1.6 JDBC版本 JDBC 1.x • 最初的java连接规范 • 作为一个内插式附件来发布的,不久就被继承到了标准的JDK中 • 提供了基本的数据存储架构、,由一些核心接口组成,包括 DriverManager,Connection,Statement,ResultSet. 3 Sept. 2008 Confidential 1.6 JDBC版本 JDBC2.0 • 新特性:可滚动结果集、可更新结果集、批量更新、性能调整。 • Core API:用java.sql包来实现,在1.0的基础上修改,因而性能更 好;可以存取任何可能的数据源。 • Optional Package API:用javax.sql包来实现,增加了企业级应用 程序特别需要需要的功能,包括数据源、JNDI、连接池、行集、 分布式事务处理。 3 Sept. 2008 Confidential 1.6 JDBC版本 JDBC3.0: • 在 JDBC 2 开发的过程中,SQL99 还处在一种变化不定 的情况下。现在规范已经完成了,而且数据库厂商已经 采用了部分标准。所以自然地,JDBC 规范就跟着将自己 与 SQL99 功能的一部分相统一。最新的 JDBC 规范已经 采用了 SQL99 标准中那些已经被广泛支持的功能,还有 那些在五年内可能会获得支持的功能。 • 新增了一个保存点的概念,保存点可以用来标记一个事 物的某些部分,以便该事物能够回退到一个给定点。 • 新增了控制连接池的更多配置参数。 • 提供了一个迁移路径以便数据库开发商能把他们的JDBC 产品朝着java connection体系结构迁移。 3 Sept. 2008 Confidential 1.7 java.sql包 • java.sql包中定义的常用的基本的 JDBC API: – 类 DriverManager-管理一组 JDBC 驱动程序的基本 服务,并支持创建新的数据库连接。 – 接口 Connection-获得与特定数据库的连接 – 接口 Statement-用于执行SQL 语句并返回它所生成 结果的对象 – 接口 ResultSet-表示数据库结果集的数据表,通常通 过执行查询数据库的语句生成 – 类 SQLException-有关数据库操作的异常 3 Sept. 2008 Confidential 1.8 小结 • JDBC体系结构 • JDBC API: – DriverManager – Connection – Statement – ResultSet – SQLException 3 Sept. 2008 Confidential 1.9 术语 缩语、术语 英文全称 解释 JDBC Java DataBase Connectivity Java 数据库连接 SQL Structure Query Language 结构化查询语言 API Application Program Interface 应用程序接口 DBMS Database Manage System 数据库管理系统 3 Sept. 2008 Confidential 第二章: JDBC 基础应用 学时:2.5学时 教学方法:讲授ppt +演示+上机练习 目标: 本章旨在向学员介绍JDBC 的基 础应用,通过本课的学习,学员 应该掌握如下知识: 1)掌握JDBC 应用程序的基本步 骤的编码 3 Sept. 2008 Confidential 2.1 创建 JDBC 应用程序的步骤 • 编写 JDBC 应用程序的基本步骤: – 导入 JDBC 类或包括 JDBC 类的包 – 加载 JDBC 驱动程序 – 建立与数据库的连接 – 创建Statement – 执行 SQL 语句,与数据库交互 – 处理结果 – 关闭连接 3 Sept. 2008 Confidential 2.2 数据库驱动程序 • 各数据库厂商均提供对 JDBC 的支持,即提供数据库连接 使用的驱动程序文件 • 需要为数据库应用程序正确加载驱动程序文件以获得数据 库连接,实施操作 • Oracle 数据库的 JDBC 驱动程序文件 “classes12.jar” 保存 在 oracle数据库安装主目录 “.\oracle\ora92” 下的 “jdbc\lib” 子目录下。 或者 “.\oracle\product\10.2.0\db_1” 下的 “jdbc\lib” 子目录 下。 3 Sept. 2008 Confidential 2.3 编程练习(1) • 在 Eclipse 下创建工程 JdbcOracleTest 及同名主 类,为该工程配置新的类库文件指向 classe12.jar。 • 时间:5分钟 3 Sept. 2008 Confidential 2.4 加载 JDBC 驱动程序 • Class 类中提供加载驱动程序的方法: className-表示类的描述符的字符串 • Oracle 驱动的类描述符为: public static Class forName(String className) throws ClassNotFoundException oracle.jdbc.driver.OracleDriver 3 Sept. 2008 Confidential 2.5 编程练习(2) • 在工程主类 JdbcOracleTest 的 main 方法中增加加载 Oracle 驱动的代码: – 声明表示 Oracle 驱动类描述符的字符串变量 driver – 调用 Class 类的静态方法 forName 加载该驱动(注意异 常处理) • 时间:5分钟 3 Sept. 2008 Confidential 2.6 建立与数据库的连接 • DriverManager 类提供 getConnection 方法可获得指定数据 库的连接对象: • Oracle 数据库的 url 格式为: public static Connection getConnection (String url, String userName, String password) throws SQLException jdbc:oracle:thin:@<主机名或IP>:1521:<数据库名> 3 Sept. 2008 Confidential 2.7 编程练习(3) • 修改类 JdbcOracleTest 的 main 方法: – 声明表示指定数据库url的字符串变量 url – 分别声明表示用户名和口令的字符串变量 userName 和 password,分别初始化为 "SCOTT" 和 "TIGER“ – 声明Connection接口对象con,赋值为 DriverManager 类的getConnection方法的返回值 – 输出打印 "数据库连接成功" 的提示信息 • 时间:10分钟 3 Sept. 2008 Confidential 2.8 获得 Statement 对象 • Connection 类中提供可获得 Statement 对象的方法: • 可调用重载的 createStatement 方法,可指定参数,设置数据 库操作结果的相关属性。 Statement createStatement() throws SQLException 3 Sept. 2008 Confidential 2.9 执行 SQL 语句 • Statement 类提供可执行 SQL 命令的方法,并可获得结果 集: ResultSet executeQuery(String sql) throws SQLException int executeUpdate(String sql) throws SQLException boolean execute(String sql) throws SQLException 3 Sept. 2008 Confidential 2.10 编程练习(4) • 在工程主类 JdbcOracleTest 的 main 方法中增加操作数据 库的代码: – 获得可发送SQL命令的Statement对象st – 调用对象st的excuteQuery方法发送SQL查询命令,查 询SCOTT下的表DEPT,获得所有记录数据,返回结果 集对象rs • 时间:10分钟 3 Sept. 2008 Confidential 2.11 操作结果集对象 • ResultSet 类提供可对结果集进行操作的方法: – 移动结果集操作指针: – 指定数据类型获取指定列的值: boolean next() throws SQLException Xxx getXxx(String columnName) throws SQLException 3 Sept. 2008 Confidential 2.12 SQL 类型对应 Java 数据类型 SQL Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean TINYINT byte SMALLINT short INTEGER int 3 Sept. 2008 Confidential 2.12 SQL 类型对应 Java 数据类型 (续) SQL Type Java Type BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp 3 Sept. 2008 Confidential 2.13 getXxx 方法 Method Java Technology Type Returned getInt int getLong long getObject Object getShort short getString java.lang.String getTime java.sql.Time getTimestamp java.sql.Timestamp getUnicodeStream java.io.InputStream of Unicode characters 3 Sept. 2008 Confidential 2.13 getXxx 方法(续) Method Java Technology Type Returned getASCIIStream java.io.InputStream getBigDecimal java.math.BigDecimal getBinaryStream java.io.InputStream getBoolean boolean getByte byte getBytes byte[ ] getDate java.sql.Date getDouble double getFloat float 3 Sept. 2008 Confidential 2.14 编程练习(续) • 在工程主类 JdbcOracleTest 的 main 方法中增加处理结 果集的代码: – 以rs对象的next()方法作为while循环的条件,调用对 象rs的getXxx方法,指定列名和类型,获取结果集对 象中DEPT表的所有数据,并打印输出。 • 时间:15分钟 3 Sept. 2008 Confidential 2.15 关闭操作对象及连接 • 可调用类 ResultSet、Statement、Connection 中的关闭方 法,立即释放数据库和 JDBC 相关资源: void close() throws SQLException 3 Sept. 2008 Confidential 2.16 编程练习(6) • 在工程主类 JdbcOracleTest 的 main 方法中增加关闭数据 库操作对象的代码: – 关闭结果集对象 rs – 关闭 Statement 对象 st – 关闭 Connection 对象 con • 时间:5分钟 3 Sept. 2008 Confidential 2.17 小结 • 编写 JDBC 应用程序的基本步骤: – 导入 JDBC 类或包括 JDBC 类的包 – 加载 JDBC 驱动程序 – 建立与数据库的连接 – 执行 SQL 语句,与数据库交互 – 关闭连接 3 Sept. 2008 Confidential 第三章: JDBC 高级应用 学时:2.5学时 教学方法:讲授ppt +上机练习 目标: 本章旨在向学员介绍JDBC 的高 级应用,通过本课的学习,学员 应该掌握如下知识: 1)掌握PreparedStatement 类 的编码使用 3 Sept. 2008 Confidential 3.1 PreparedStatement 类 • PreparedStatement 类是 Statement 类的子类,允许使用 不同的参数多次执行同样的 SQL 语句。 • Connection类提供创建PreparedStatement对象的方法, 可指定SQL语句: PreparedStatement prepareStatement(String sql) throws SQLException 3 Sept. 2008 Confidential 3.2 PreparedStatement 类示例 PreparedStatement pstmt = con.prepareStatement ("INSERT INTO EMP VALUES(?,?)"); pstmt.setInt(1, 99); pstmt.setString(2, "Tom"); pstmt.executeUpdate( ); 3 Sept. 2008 Confidential 3.3 setXxx 方法 Method SQL Type setFloat FLOAT setInt INTEGER setLong BIGINT setNull NULL setObject The given object that is converted to the target SQL type before being sent setShort SMALLINT setString VARCHAR or LONGVARCHAR (depending on the size relative to the driver’s limits on VARCHAR) setTime TIME setTimestamp TIMESTAMP 3 Sept. 2008 Confidential 3.3 setXxx 方法(续) Method SQL Type setASCIIStream LONGVARCHAR produced by an ASCII stream setBigDecimal NUMERIC setBinaryStream LONGVARBINARY setBoolean BIT setByte TINYINT setBytes VARBINARY or LONGVARBINARY (depending on the size relative to the limits on VARBINARY) setDate DATE setDouble DOUBLE 3 Sept. 2008 Confidential 3.4 编程练习(7) • 修改 JdbcOracleTest 类代码,尝试使用 PreparedStatement 类发送 SQL 命令,实现对数据库的 操作。 • 时间:15分钟 3 Sept. 2008 Confidential 3.5 PreparedStatement 类的作用 • PreparedStatement 类的作用: – 可动态设置参数 – 增加了预编译功能 – 提高执行速度 3 Sept. 2008 Confidential 3.6 CallableStatement 类 • CallableStatement类是PreparedStatement 类的子类,用 于调用并执行数据库的存储过程。 • Connection类提供创建CallableStatement对象的方法以调 用数据库存储过程,可指定SQL语句: CallableStatement prepareCall(String sql) throws SQLException 3 Sept. 2008 Confidential 3.7 CallableStatement 类示例 CallableStatement cstmt = con.prepareCall ("{ call do_total(?,?,?) }"); cstmt.registerOutParameter(1, Types.NUMBER); cstmt.setInt(2, v_sal); cstmt.setString(3, v_comm); cstmt.execute( ); 3 Sept. 2008 Confidential 3.8 编程练习(8) • 修改 JdbcOracleTest 类代码,尝试使用 CallableStatement 类调用数据库的存储过程。 • 时间:15分钟 3 Sept. 2008 Confidential 3.10 事务 • 使用JDBC API进行事务操作步骤: – setAutoCommit(false) – 对数据库执行一个或多个操作 – 调用commit(),进行数据库真正的更新 – 调用rollback(),撤销上次commit提交后的变更 3 Sept. 2008 Confidential 3.11 小结 • PreparedStatement 类 – setXxx 方法 • CallableStatement 类 • Metadata: – Database metadata – Resultset metadata • 事务 3 Sept. 2008 Confidential Copyright © 2008 版 权所有 东软 集团

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档