编程红宝书(珍藏版) ava 完金自学手册 第10章JDBC链接数据库 JDBC链接数据库主要讲解如何使用Java的JDBC ( Java dataBase Connectivity)实现与不同数 据库厂商,如 Oracle、 SQL Server、 Access等的 链接。本章在介绍实现数据库链接常用类和接口 的基础上,实现了一个数据库链接的实例,通过 该实例读者可以掌握使用JDBC实现基本的数据库 操作,如读、写、删、改数据库记录等。本节和 下一节,将深入讨论如何使用 JDBC API。 Q想桃工业出隙社
第10章 JDBC链接数据库 • JDBC链接数据库主要讲解如何使用Java的JDBC (Java DataBase Connectivity)实现与不同数 据库厂商,如Oracle、SQL Server、Access等的 链接。本章在介绍实现数据库链接常用类和接口 的基础上,实现了一个数据库链接的实例,通过 该实例读者可以掌握使用JDBC实现基本的数据库 操作,如读、写、删、改数据库记录等。本节和 下一节,将深入讨论如何使用JDBC API
编程红宝书(珍藏版) ava 完金自学手 0.1JDBC简介 本节首先介绍什么是JDBC,了解 Java jDbc的目标 及如何实现数据库平台的无关性。了解了这些基 本知识后,才能更熟练的使用 JDBC API实现数据 库的链接和各种数据库访问行为,从而最终掌握 使用JDBC编写基本的数据库应用程序 Q想桃工业出隙社
10.1 JDBC简介 • 本节首先介绍什么是JDBC,了解Java JDBC的目标 及如何实现数据库平台的无关性。了解了这些基 本知识后,才能更熟练的使用JDBC API实现数据 库的链接和各种数据库访问行为,从而最终掌握 使用JDBC编写基本的数据库应用程序
编程红宝书(珍藏版) ava 完金自学手 10.1.1什么是JDBC JDBC是Sun开发的一套数据库访问编程接口,是 种SQL级别的API。它由Java语言编写完成,所以 具有很好的跨平台特性,使用JDBC编写的数据库 应用程序可以在任何支持Java的平台上运行,而 不必在不同的平台上编写不同的应用程序,使用 JDBC API就不必为访问 Access数据库而专门写 个程序,为访问 Oracle数据库而专门写一个程序, 只需要一个程序就够了,通过它可以向数据库发 送SL语句、执行数据库操作 Q想桃工业出隙社
10.1.1 什么是JDBC • JDBC是Sun开发的一套数据库访问编程接口,是一 种SQL级别的API。它由Java语言编写完成,所以 具有很好的跨平台特性,使用JDBC编写的数据库 应用程序可以在任何支持Java的平台上运行,而 不必在不同的平台上编写不同的应用程序,使用 JDBC API就不必为访问Access数据库而专门写一 个程序,为访问Oracle数据库而专门写一个程序, 只需要一个程序就够了,通过它可以向数据库发 送SQL语句、执行数据库操作
编程红宝书(珍藏版) ava 完金自学手 10.1.2JDBC的目标 当前数据库的主要问题之一是不同厂商数据库产品的功能竞争,虽然他们 都依据标准的结构化查询语言( Structured Query Language,SQL-92), 但各个厂商还是有标准以外的东西,或者并没有完全按照标准结构化查询 语言的规范实现自己的数据库产品。如果一个数据库应用程序所链接的数 据库发生变化(如从 Oracle变为 Sybase),没有JDBC这种变化的实现就 很困难,必须重新编写数据库访问程序,这当然不是件好事。那么如何构 建与数据库平台无关的数据库应用程序呢?这就是JDBC的目标。 JDBC的体系结构如图所示,通过该图可以清楚的看到,对应用程序而言 JDBC屏蔽了下层数据库的差异,应用程序看到的是统一的数据库接口 applicatin applicaton JDEC JDBC体系结构 Q想桃工业出隙社
10.1.2 JDBC的目标 • 当前数据库的主要问题之一是不同厂商数据库产品的功能竞争,虽然他们 都依据标准的结构化查询语言(Structured Query Language,SQL-92), 但各个厂商还是有标准以外的东西,或者并没有完全按照标准结构化查询 语言的规范实现自己的数据库产品。如果一个数据库应用程序所链接的数 据库发生变化(如从Oracle 变为Sybase),没有JDBC这种变化的实现就 很困难,必须重新编写数据库访问程序,这当然不是件好事。那么如何构 建与数据库平台无关的数据库应用程序呢?这就是JDBC的目标。 • JDBC的体系结构如图所示,通过该图可以清楚的看到,对应用程序而言, JDBC屏蔽了下层数据库的差异,应用程序看到的是统一的数据库接口
编程红宝书(珍藏版) ava 完金自学手 10.1.3JDBC如何实现数据库的平台无关性 为了让JDBC与平台无关,JDBC设计了“驱动程序 管理类”,该类会动态维护目前所有数据库产品 的驱动程序对象,通过加载相应的数据库驱动程 序就可以实现对数据库的访问。这里的“驱动程 序管理器”就是 Drivermanager类 Drivermanager类存有已注册的 Driver类的清单 当调用方法 getConnection时,它将检查清单中的 每个驱动程序,直到找到可与URL中指定的数据库 进行链接的驱动程序为止。 Driver的方法 connect 使用这个URL来建立实际的链接。具体如何实现数 据库的链接,我们通过在10.3节的基本概念和具 体示例再详细介绍 Q想桃工业出隙社
10.1.3 JDBC如何实现数据库的平台无关性 • 为了让JDBC与平台无关,JDBC设计了“驱动程序 管理类”,该类会动态维护目前所有数据库产品 的驱动程序对象,通过加载相应的数据库驱动程 序就可以实现对数据库的访问。这里的“驱动程 序管理器”就是DriverManager类。 • DriverManager类存有已注册的Driver类的清单。 当调用方法getConnection时,它将检查清单中的 每个驱动程序,直到找到可与URL中指定的数据库 进行链接的驱动程序为止。Driver的方法connect 使用这个URL来建立实际的链接。具体如何实现数 据库的链接,我们通过在10.3节的基本概念和具 体示例再详细介绍
编程红宝书(珍藏版) ava 完金自学手 10.2JDBC中的常用类和接口 Java aPi的设计思想是简洁、直观。所以JDBC同 样把单纯性作为设计目标。即在数据库操作时所 调用的函数都符合人的逻辑思维。如链接到数据 库( Connection)、建立操作指令( Statement)、 执行查询指令( executeQuery)、获得查询结果 ( Resultset)等。JDBC的功能基本上归结为三件 事,即建立数据库链接、发送SQL语句和处理查询 结果。这些任务的完成都基于 JDBC API。下面将 依次介绍常用的 JDBC API Q想桃工业出隙社
10.2 JDBC中的常用类和接口 • Java API的设计思想是简洁、直观。所以JDBC同 样把单纯性作为设计目标。即在数据库操作时所 调用的函数都符合人的逻辑思维。如链接到数据 库(Connection)、建立操作指令(Statement)、 执行查询指令(executeQuery)、获得查询结果 (ResultSet)等。JDBC的功能基本上归结为三件 事,即建立数据库链接、发送SQL语句和处理查询 结果。这些任务的完成都基于JDBC API。下面将 依次介绍常用的JDBC API
编程红宝书(珍藏版) ava 完金自学手 10.2.1驱动程序管理类( Drivermanager) Drivermanager类是JDBC的管理层,作用于用户和 驱动程序之间。它跟踪可用的驱动程序,并在数 据库和相应驱动程序之间建立链接。另外, Drivermanager类也处理诸如驱动程序登录时间限 制及登录和跟踪消息的显示等事务。对于简单的 应用程序,一般程序员需要在此类中直接使用的 惟一方法是 Driver manager. getConnection() 该方法将建立与数据库的链接。JDBC允许用户调 用 Drivermanager的方法 getDriver、 getDrivers 和 registerDriver及 Driver的方法 connect。但多 数情况下,还是首先考虑让 DriverManager类管理 建立数据库链接的细节。 Q想桃工业出隙社
10.2.1 驱动程序管理类(DriverManager) • DriverManager类是JDBC的管理层,作用于用户和 驱动程序之间。它跟踪可用的驱动程序,并在数 据库和相应驱动程序之间建立链接。另外, DriverManager类也处理诸如驱动程序登录时间限 制及登录和跟踪消息的显示等事务。对于简单的 应用程序,一般程序员需要在此类中直接使用的 惟一方法是DriverManager.getConnection( )。 该方法将建立与数据库的链接。JDBC允许用户调 用DriverManager的方法getDriver、getDrivers 和registerDriver及Driver的方法connect。但多 数情况下,还是首先考虑让DriverManager类管理 建立数据库链接的细节
编程红宝书(珍藏版) ava 完金自学手 0.2.2声明类( Statement) · Statement对象用于将SQL语句发送到数据库中。实际上有 三种 Statement对象,它们都作为在给定链接上执行SQL语 句的包容器: Statement、 PreparedStatement(它从 Statement继承而来)和 Callablestatement(它从 Preparedstatement继承而来)。它们都专用于发送特定类 型的SQL语句: Statement对象用于执行不带参数的简单SQ 语句; PreparedStatement对象用于执行带或不带IN参数的 预编译SQL语句; Callablestatement对象用于执行对数据 库已存储过程的调用。 Statement接口提供了执行语句和获 取结果的基本方法。 Preparedstatement接口添加了处理IN 参数的方法;而Ca1 Lablestatement添加了处理OUT参数的 方法。由于 Statement接口是最常用的接口,所以下面以该 接口为例展示该类的用法 Q想桃工业出隙社
10.2.2 声明类(Statement) • Statement对象用于将SQL语句发送到数据库中。实际上有 三种Statement对象,它们都作为在给定链接上执行SQL语 句的包容器:Statement、PreparedStatement(它从 Statement继承而来)和CallableStatement(它从 PreparedStatement继承而来)。它们都专用于发送特定类 型的SQL语句:Statement对象用于执行不带参数的简单SQL 语句;PreparedStatement对象用于执行带或不带IN参数的 预编译SQL语句;CallableStatement对象用于执行对数据 库已存储过程的调用。Statement接口提供了执行语句和获 取结果的基本方法。PreparedStatement接口添加了处理IN 参数的方法;而CallableStatement添加了处理OUT参数的 方法。由于Statement接口是最常用的接口,所以下面以该 接口为例展示该类的用法
编程红宝书(珍藏版) ava 完金自学手 10.2.3数据库链接类( Connection) Connection对象代表与数据库的链接。链接过程 包括所执行的SQL语句和在该链接上所返回的结 果。一个应用程序可与单个数据库有一个或多个 链接,或者可与许多数据库有链接。打开链接与 数据库建立链接的标准方法是调用 Drivermanager. getConnection方法。该方法接受 含有某个URL的字符串。 DriverManager类(即所 谓的JDBC管理层)将尝试找到可与那个URL所代表 的数据库进行链接的驱动程序。 Driver manager类 存有已注册的 Driver类的清单。当调用方法 getConnection时,它将检查清单中的每个驱动程 序,直到找到可与URL中指定的数据库进行链接 Q 械工业出版社 China Machine Press
10.2.3 数据库链接类(Connection) • Connection对象代表与数据库的链接。链接过程 包括所执行的 SQL 语句和在该链接上所返回的结 果。一个应用程序可与单个数据库有一个或多个 链接,或者可与许多数据库有链接。打开链接与 数据库建立链接的标准方法是调用 DriverManager.getConnection方法。该方法接受 含有某个URL的字符串。DriverManager类(即所 谓的JDBC管理层)将尝试找到可与那个URL所代表 的数据库进行链接的驱动程序。DriverManager类 存有已注册的Driver类的清单。当调用方法 getConnection时,它将检查清单中的每个驱动程 序,直到找到可与URL 中指定的数据库进行链接
编程红宝书(珍藏版) ava 完金自学手 10.2.4结果集合类( Resultset) Resultset包含符合SQL语句中条件的所有行记录,并且它通过一套get方 法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的 访问。 Resultset. next o方法用于移动到 Resultset中的下一行,使下 行成为当前行。代码执行SQL语句的示例。 ·代码执行SQL语句的示例 1 java. sql Statement stmt= conn. createStatement O 2//获得查询结果集合 3 Resultset r stmt. executeQuery (select a, b, C FROM Table1") 4 while (r nexto) //如果结果集合中有数据则打印相应 的数据 6inti=r. getInt("a");//打印当前行的值 7 Strings =r getString( b") 8 float f =r getFloat("c") 9 System. out. println(ROW=+i++s++f) Q想桃工业出隙社
10.2.4 结果集合类(ResultSet) • ResultSet包含符合SQL语句中条件的所有行记录,并且它通过一套get方 法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的 访问。ResultSet.next()方法用于移动到ResultSet中的下一行,使下一 行成为当前行。代码执行SQL语句的示例。 • 代码执行 SQL 语句的示例 • 1 java.sql.Statement stmt = conn.createStatement(); • 2 //获得查询结果集合 • 3 ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1"); • 4 while (r.next()) //如果结果集合中有数据则打印相应 的数据 • 5 { • 6 int i = r.getInt("a"); //打印当前行的值 • 7 String s = r.getString("b"); • 8 float f = r.getFloat("c"); • 9 System.out.println("ROW = " + i + " " + s + " " + f); • 10 }