JDBC与Java数据库编程.pdf
3 Sept.2008 Neusoft ConfidentialJDBC与与JAVA数据库编程数据库编程东软人才实训中心Copyright 2008 By Neusoft Group.All rights reserved3 Sept.2008Confidential课程目标课程目标培训目标:具备使用Java连接到数据库的能力;掌握用JDBC进行数据库应用程序的开发;掌握用JDBC操作数据库的能力;3 Sept.2008Confidential课程结构课程结构内容内容课时(H)课时(H)第一章:第一章:JDBC 的概念的概念1第二章:第二章:JDBC 基础应用基础应用2.5第三章:第三章:JDBC 高级应用高级应用2.53 Sept.2008Confidential第一章:第一章:JDBC 的概念的概念学时:1学时教学方法:讲授ppt学时:1学时教学方法:讲授ppt目标:目标:本章旨在向学员介绍JDBC 的概念,通过本课的学习,学员应该掌握如下知识:1)了解JDBC的体系结构2)掌握java.sql包中常用的基本的 JDBC API本章旨在向学员介绍JDBC 的概念,通过本课的学习,学员应该掌握如下知识:1)了解JDBC的体系结构2)掌握java.sql包中常用的基本的 JDBC API3 Sept.2008Confidential1.1 JDBC 是什么是什么DBMSJava 数据库应用程序数据库应用程序客户机客户机DBMS 独有的协议独有的协议数据库服务器数据库服务器JDBCJDBC(Java DataBase Connectivity)Java 数据库连接,主要提供编写 Java 数据库应用程序的 API 支持。3 Sept.2008Confidential1.1 JDBC 是什么是什么JDBC提供了执行SQL语句来操作关系数据库的手段。JDBC被设计成一个基于Java的面向对象应用编程接口以便于数据访问,并成为一个java开发人员和数据库厂商可以遵循的一个标准。这个包的实现位于java.sql包中。它是类和接口的一个集合,而这些类和接口提供了存取多种数据库的一个统一API。JDBC包的设计目的是成为执行SQL语句的接口,而不是用于数据存取的一个高级抽象层。JDBC应用程序与正在使用中的数据库管理系统的具体特征得到了充分的隔离,因此设计人员不必为具体数据库而重新设计它。3 Sept.2008Confidential1.1 JDBC 是什么是什么JDBC是用于执行SQL语句的Java应用程序接口,是一套API集合,在这个集合中设置了许多允许Java程序连接数据库的框架。JDBC由一组用java语言写成的类和接口组成,是一种连接不同数据库的规范,其宗旨是让各数据库开发商为java程序员提供标准的数据库访问类和接口。JDBC与Java结合,使用户可以很容易地把SQL语句传送到任何关系型数据库中,程序员用它编写的数据库应用程序,可以在各种数据库系统中运行。因为java是跨平台的,所以JDBC也具有跨平台性。3 Sept.2008Confidential1.2 JDBC 实现的功能实现的功能创建和管理与数据源的连接发送 SQL 命令至数据源提取并处理由数据源返回至应用程序的结果集3 Sept.2008Confidential1.3 JDBC体系结构图体系结构图Java数据库应用程序数据库应用程序JDBC APIJDBC Driver Interface客户机客户机DBMS独有的协议独有的协议数据库服务器数据库服务器DBMS3 Sept.2008Confidential1.3 JDBC 的体系结构的体系结构JDBC的结构可划分为两层:JDBC 驱动程序管理器接口:是底层的驱动程序层(JDBC Driver API),处理与具体驱动程序版本的所有通信。JDBC API:一个是面向程序开发人员的应用程序层,开发人员用API通过SQL调用数据库和取得结果。3 Sept.2008Confidential1.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.2008Confidential1.4 数据库驱动程序数据库驱动程序JDBC-ODBC Bridge Driver适用于快速的原型系统,没有提供jdbc驱动的数据库,如access3 Sept.2008Confidential1.4 数据库驱动程序数据库驱动程序Native API Driver利用开发商提供的本地库来直接与数据库通信,比type1性能略好。3 Sept.2008Confidential1.4 数据库驱动程序数据库驱动程序JDBC-Net Driver具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。3 Sept.2008Confidential1.4 数据库驱动程序数据库驱动程序Native API based最高的性能,通过自己的本地协议直接与数据库引擎通信,具备在internet装配的能力。3 Sept.2008Confidential1.5 JDBC优缺点优缺点优点:(1)JDBC API与ODBC(Open Data Base Connectivity)十分相似,有利于用户理解。(2)JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。(3)JDBC支持不同的关系数据库,这使得程序的可移植性大大加强。(4)JDBC API是面向对象的,可以让用户把常用的方法封装为个类,以备后用。缺点:(1)使用JDBC,访问数据记录的速度会受到一定程度的影响。(2)JDBC结构中包含不同厂家的产品,这就给更改数据源带来了很大的麻烦。3 Sept.2008Confidential1.6 JDBC版本版本JDBC 1.x最初的java连接规范作为一个内插式附件来发布的,不久就被继承到了标准的JDK中提供了基本的数据存储架构、,由一些核心接口组成,包括DriverManager,Connection,Statement,ResultSet.3 Sept.2008Confidential1.6 JDBC版本版本JDBC2.0新特性:可滚动结果集、可更新结果集、批量更新、性能调整。Core API:用java.sql包来实现,在1.0的基础上修改,因而性能更好;可以存取任何可能的数据源。Optional Package API:用javax.sql包来实现,增加了企业级应用程序特别需要需要的功能,包括数据源、JNDI、连接池、行集、分布式事务处理。3 Sept.2008Confidential1.6 JDBC版本版本JDBC3.0:在 JDBC 2 开发的过程中,SQL99 还处在一种变化不定的情况下。现在规范已经完成了,而且数据库厂商已经采用了部分标准。所以自然地,JDBC 规范就跟着将自己与 SQL99 功能的一部分相统一。最新的 JDBC 规范已经采用了 SQL99 标准中那些已经被广泛支持的功能,还有那些在五年内可能会获得支持的功能。新增了一个保存点的概念,保存点可以用来标记一个事物的某些部分,以便该事物能够回退到一个给定点。新增了控制连接池的更多配置参数。提供了一个迁移路径以便数据库开发商能把他们的JDBC产品朝着java connection体系结构迁移。3 Sept.2008Confidential1.7 java.sql包包java.sql包中定义的常用的基本的 JDBC API:类 DriverManager管理一组 JDBC 驱动程序的基本服务,并支持创建新的数据库连接。接口 Connection获得与特定数据库的连接接口 Statement用于执行SQL 语句并返回它所生成结果的对象接口 ResultSet表示数据库结果集的数据表,通常通过执行查询数据库的语句生成类 SQLException有关数据库操作的异常3 Sept.2008Confidential1.8 小结小结JDBC体系结构JDBC API:DriverManagerConnectionStatementResultSetSQLException3 Sept.2008Confidential1.9 术语术语缩语、术语英文全称解 释JDBCJava DataBaseConnectivityJava 数据库连接SQLStructure Query Language结构化查询语言APIApplication Program Interface应用程序接口DBMSDatabase Manage System数据库管理系统3 Sept.2008Confidential第二章:第二章:JDBC 基础应用基础应用学时:2.5学时教学方法:讲授ppt演示学时:2.5学时教学方法:讲授ppt演示上机练习上机练习目标:本章旨在向学员介绍JDBC 的基础应用,通过本课的学习,学员应该掌握如下知识:1)掌握JDBC 应用程序的基本步骤的编码目标:本章旨在向学员介绍JDBC 的基础应用,通过本课的学习,学员应该掌握如下知识:1)掌握JDBC 应用程序的基本步骤的编码3 Sept.2008Confidential2.1 创建创建 JDBC 应用程序的步骤应用程序的步骤编写 JDBC 应用程序的基本步骤:导入 JDBC 类或包括 JDBC 类的包加载 JDBC 驱动程序建立与数据库的连接创建Statement执行 SQL 语句,与数据库交互处理结果关闭连接3 Sept.2008Confidential2.2 数据库驱动程序数据库驱动程序各数据库厂商均提供对 JDBC 的支持,即提供数据库连接使用的驱动程序文件需要为数据库应用程序正确加载驱动程序文件以获得数据库连接,实施操作Oracle 数据库的 JDBC 驱动程序文件“classes12.jar”保存在 oracle数据库安装主目录“.oracleora92”下的“jdbclib”子目录下。或者“.oracleproduct10.2.0db_1”下的“jdbclib”子目录下。3 Sept.2008Confidential2.3 编程练习编程练习(1)在 Eclipse 下创建工程 JdbcOracleTest 及同名主类,为该工程配置新的类库文件指向 classe12.jar。时间:5分钟3 Sept.2008Confidential2.4 加载加载 JDBC 驱动程序驱动程序Class 类中提供加载驱动程序的方法:className表示类的描述符的字符串Oracle 驱动的类描述符为:public static Class forName(String className)throws ClassNotFoundExceptionoracle.jdbc.driver.OracleDriver3 Sept.2008Confidential2.5 编程练习编程练习(2)在工程主类 JdbcOracleTest 的 main 方法中增加加载 Oracle 驱动的代码:声明表示 Oracle 驱动类描述符的字符串变量 driver调用 Class 类的静态方法 forName 加载该驱动(注意异常处理)时间:5分钟3 Sept.2008Confidential2.6 建立与数据库的连接建立与数据库的连接DriverManager 类提供 getConnection 方法可获得指定数据库的连接对象:Oracle 数据库的 url 格式为:public static Connection getConnection(String url,String userName,String password)throws SQLExceptionjdbc:oracle:thin:1521:3 Sept.2008Confidential2.7 编程练习编程练习(3)修改类 JdbcOracleTest 的 main 方法:声明表示指定数据库url的字符串变量 url分别声明表示用户名和口令的字符串变量 userName 和password,分别初始化为 SCOTT 和 TIGER“声明Connection接口对象con,赋值为 DriverManager类的getConnection方法的返回值输出打印 数据库连接成功 的提示信息时间:10分钟3 Sept.2008Confidential2.8 获得获得 Statement 对象对象Connection 类中提供可获得 Statement 对象的方法:可调用重载的 createStatement 方法,可指定参数,设置数据库操作结果的相关属性。Statement createStatement()throws SQLException3 Sept.2008Confidential2.9 执行执行 SQL 语句语句Statement 类提供可执行 SQL 命令的方法,并可获得结果集:ResultSet executeQuery(String sql)throws SQLExceptionint executeUpdate(String sql)throws SQLExceptionboolean execute(String sql)throws SQLException3 Sept.2008Confidential2.10 编程练习编程练习(4)在工程主类 JdbcOracleTest 的 main 方法中增加操作数据库的代码:获得可发送SQL命令的Statement对象st调用对象st的excuteQuery方法发送SQL查询命令,查询SCOTT下的表DEPT,获得所有记录数据,返回结果集对象rs时间:10分钟3 Sept.2008Confidential2.11 操作结果集对象操作结果集对象ResultSet 类提供可对结果集进行操作的方法:移动结果集操作指针:指定数据类型获取指定列的值:boolean next()throws SQLExceptionXxx getXxx(String columnName)throws SQLException3 Sept.2008Confidential2.12 SQL 类型对应类型对应 Java 数据类型数据类型SQL TypeJava TypeCHARStringVARCHARStringLONGVARCHARStringNUMERICjava.math.BigDecimalDECIMALjava.math.BigDecimalBITbooleanTINYINTbyteSMALLINTshortINTEGERint3 Sept.2008Confidential2.12 SQL 类型对应类型对应 Java 数据类型(续)数据类型(续)SQL TypeJava TypeBIGINTlongREALfloatFLOATdoubleDOUBLEdoubleBINARYbyteVARBINARYbyteLONGVARBINARYbyteDATEjava.sql.DateTIMEjava.sql.TimeTIMESTAMPjava.sql.Timestamp3 Sept.2008Confidential2.13 getXxx 方法方法MethodJava Technology Type ReturnedgetIntintgetLonglonggetObjectObjectgetShortshortgetStringjava.lang.StringgetTimejava.sql.TimegetTimestampjava.sql.TimestampgetUnicodeStreamjava.io.InputStream of Unicode characters3 Sept.2008Confidential2.13 getXxx 方法(续)方法(续)MethodJava Technology Type ReturnedgetASCIIStreamjava.io.InputStreamgetBigDecimaljava.math.BigDecimalgetBinaryStreamjava.io.InputStreamgetBooleanbooleangetBytebytegetBytesbyte getDatejava.sql.DategetDoubledoublegetFloatfloat3 Sept.2008Confidential2.14 编程练习(续)编程练习(续)在工程主类 JdbcOracleTest 的 main 方法中增加处理结果集的代码:以rs对象的next()方法作为while循环的条件,调用对象rs的getXxx方法,指定列名和类型,获取结果集对象中DEPT表的所有数据,并打印输出。时间:15分钟3 Sept.2008Confidential2.15 关闭操作对象及连接关闭操作对象及连接可调用类 ResultSet、Statement、Connection 中的关闭方法,立即释放数据库和 JDBC 相关资源:void close()throws SQLException3 Sept.2008Confidential2.16 编程练习编程练习(6)在工程主类 JdbcOracleTest 的 main 方法中增加关闭数据库操作对象的代码:关闭结果集对象 rs关闭 Statement 对象 st关闭 Connection 对象 con时间:5分钟3 Sept.2008Confidential2.17 小结小结编写 JDBC 应用程序的基本步骤:导入 JDBC 类或包括 JDBC 类的包加载 JDBC 驱动程序建立与数据库的连接执行 SQL 语句,与数据库交互关闭连接3 Sept.2008Confidential第三章:第三章:JDBC 高级应用高级应用学时:2.5学时教学方法:讲授ppt上机练习学时:2.5学时教学方法:讲授ppt上机练习目标:本章旨在向学员介绍JDBC 的高级应用,通过本课的学习,学员应该掌握如下知识:1)掌握PreparedStatement 类的编码使用目标:本章旨在向学员介绍JDBC 的高级应用,通过本课的学习,学员应该掌握如下知识:1)掌握PreparedStatement 类的编码使用3 Sept.2008Confidential3.1 PreparedStatement 类类PreparedStatement 类是 Statement 类的子类,允许使用不同的参数多次执行同样的 SQL 语句。Connection类提供创建PreparedStatement对象的方法,可指定SQL语句:PreparedStatement prepareStatement(String sql)throws SQLException3 Sept.2008Confidential3.2 PreparedStatement 类示例类示例PreparedStatement pstmt=con.prepareStatement(INSERT INTO EMP VALUES(?,?);pstmt.setInt(1,99);pstmt.setString(2,Tom);pstmt.executeUpdate();3 Sept.2008Confidential3.3 setXxx 方法方法MethodSQL TypesetFloatFLOATsetIntINTEGERsetLongBIGINTsetNullNULLsetObjectThe given object that is converted to the target SQL type before being sentsetShortSMALLINTsetStringVARCHAR or LONGVARCHAR(depending on the size relative to the drivers limits on VARCHAR)setTimeTIMEsetTimestampTIMESTAMP3 Sept.2008Confidential3.3 setXxx 方法(续)方法(续)MethodSQL TypesetASCIIStreamLONGVARCHAR produced by an ASCII streamsetBigDecimalNUMERICsetBinaryStreamLONGVARBINARYsetBooleanBITsetByteTINYINTsetBytesVARBINARY or LONGVARBINARY(depending on the size relative tothe limits on VARBINARY)setDateDATEsetDoubleDOUBLE3 Sept.2008Confidential3.4 编程练习编程练习(7)修改 JdbcOracleTest 类代码,尝试使用PreparedStatement 类发送 SQL 命令,实现对数据库的操作。时间:15分钟3 Sept.2008Confidential3.5 PreparedStatement 类的作用类的作用PreparedStatement 类的作用:可动态设置参数增加了预编译功能提高执行速度3 Sept.2008Confidential3.6 CallableStatement 类类CallableStatement类是PreparedStatement 类的子类,用于调用并执行数据库的存储过程。Connection类提供创建CallableStatement对象的方法以调用数据库存储过程,可指定SQL语句:CallableStatement prepareCall(String sql)throws SQLException3 Sept.2008Confidential3.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.2008Confidential3.8 编程练习编程练习(8)修改 JdbcOracleTest 类代码,尝试使用CallableStatement 类调用数据库的存储过程。时间:15分钟3 Sept.2008Confidential3.10 事务事务使用JDBC API进行事务操作步骤:setAutoCommit(false)对数据库执行一个或多个操作调用commit(),进行数据库真正的更新调用rollback(),撤销上次commit提交后的变更3 Sept.2008Confidential3.11 小结小结PreparedStatement 类setXxx 方法CallableStatement 类Metadata:Database metadataResultset metadata事务3 Sept.2008ConfidentialCopyright 2008 版权所有 东软集团