1、2022-7-191第第4章章 JDBC数据库访问技术数据库访问技术2022-7-192目录JDBC数据库操作数据库操作JDBC技术概述技术概述MySql数据库基础数据库基础JDBC 数据库操作实例数据库操作实例2022-7-193掌握使用JDBC提供的API数据库操作了解JDBC的基本概念和相关的使用方法掌握以MySql数据库为例的对数据库的访问方法和操作过程2022-7-1944.1 JDBC技术概述 Java数据库连接(Java Database Connection,JDBC),是按照 ODBC 的模式制定的,是一个通用低层的、支持执行基本SQL语句功能的Java API,可以为多种关
2、系数据库提供统一访问,它是由一组用Java语言编写的类和接口组成,这使得程序员可以面对统一的数据库界面,无需考虑数据库的差异性,使开发数据库无关的Java 产品成为可能,同时也提供了多样化的数据库连接方式。4.1.1 JDBC简介 JDBC就是一套数据库驱动的规范,是一个将Java 语言与 SQL 结合,在数据库与Java源程序之间,由多个接口和类组成并提供和大多数数据库连接的一个标准的Java API。JDBC是 Java应用程序与各种不同数据库之间进行对话的方法,并不需要关心数据组织格式和应用系统其他代码之间的联系。JDBC 扩展了 Java 的功能。2022-7-1954.1.2 JDB
3、C连接方式JDBC定义了以下4种不同的驱动连接方式:1、JDBC-ODBC Bridge 2、Native-API Java Driver 3、Pure Java Driver for Database Middleware Server 4、Direct-to-Database Pure Java Driver2022-7-1962022-7-1971、JDBC-ODBC Bridge JDBC-ODBC Bridge属于非纯Java驱动程序。在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的,通过JDBC-ODBC桥,开发人员可以使用JDBC来存取ODBC数据源。但是采用JD
4、BC-ODBC桥的方式访问数据库需要多层调用,这样访问数据库的效率比较低。而且在客户端必须安装需要数据库的ODBC驱动程序,导致若使用该连接方式必须牺牲JDBC的平台独立性。另外,ODBC驱动程序还需要具有客户端的控制权限,并且这种方式不适合程序的重用与维护,不推荐使用。但是在数据库厂商没有提供JDBC驱动而通过ODBC可以访问数据库的情况下,利用JDBC-ODBC桥驱动访问数据库是一种较好的访问方式。比如应用程序要想访问Microsoft Access数据库时,就只能利用JDBC-ODBC桥驱动来访问Access数据库。2022-7-1982、Native-API Java Driver N
5、ative-API Java Driver属于非纯Java驱动程序。此类方式提供了一种JDBC接口,它建立在本地数据库驱动程序的顶层,而不需要使用ODBC,执行效率比第一种高。JDBC驱动程序将对数据库的API从标准的JDBC调用转换为本地调用。目前几个主要的数据库厂商都提供了各自的JDBC数据库驱动程序,如Microsoft、Sybase、Oracle等。与其他3种驱动程序相比较,这种方式能有效用于控制较严的企业内部局域网环境,并且这种方式访问数据库的效率是最高的。但是直接将JDBC API映射成数据库特定的客户端API,这种驱动程序包含特定数据库的本地代码,还要求在客户端安装一些本地代码,
6、所以若采用此类型,则程序的开发会受到客户端平台及所属操作系统的限制,从而牺牲了JDBC的平台独立性,并且将来新版本软件的升级安装也较为费事。所以这类驱动程序应用存在限制,如不太适合用于Applet等。2022-7-1993、Pure Java Driver for Database Middleware Server Pure Java Driver for Database Middleware类型属于纯Java技术驱动程序。这种驱动实际上是根据三层架构建立的。此类方式能将JDBC调用转换为特定数据库直接使用的网络协议,不需要安装客户端软件,是使用一个纯Java数据库驱动程序实现对数据库的直
7、接访问。由于能够直接与数据库实例交互,具有智能性的,可最大限度地发挥数据库特定功能,从而提供较高其运行效率。由于这种驱动是基于server的,所以它不需要在客户端加载数据库厂商提供的代码库,而且它在执行效率和可升级性方面是比较好的。因为大部分功能实现都在server端,所以这种驱动可以设计的很小,可以非常快速的加载到内存中。这种驱动可以把多种数据库驱动都配置在中间层服务器,所以这种驱动最适合那种需要同时连接多个不同种类的数据库,并且对并发连接要求高的应用。2022-7-19104、Direct-to-Database Pure Java Driver Direct-to-Database Pu
8、re Java Driver属于纯Java驱动程序,此类方式直接把JDBC调用转换为符合相关数据库系统规范的请求。由于该类型驱动写的应用可以直接和数据库服务器通讯,而且这种类型的驱动完全是由Java来实现的,实现了平台独立性。这种驱动与第3 种类型相比,则适合那些连接单一数据库的工作组应用。此类方式将完全通过Java驱动,其本质是使用Java sockets来连接数据库。基于internet方面的应用就只有考虑第3、4种驱动连接方式。所以它特别适合于通过网络使用后台数据库的Applet及Web应用,后面介绍的JDBC应用主要使用该类型的驱动程序。目前,大部分数据库厂商提供了该类驱动程序的支持,
9、此类驱动也一般被认定为是较好的一种驱动程序,是目前最流行的JDBC驱动类型。2022-7-19114.2 JDBC数据库操作 JDBC数据库操作实际上就是Java应用程序通过JDBC API界面访问JDBC管理器,JDBC管理器通过JDBC驱动程序API访问不同的JDBC驱动程序,从而实现对不同数据库的访问。本节主要介绍了JDBC API的功能与组成、DriverManager对象、Connection对象、SQL声明对象和ResultSet查询结果对象的功能及使用。4.2.1 JDBC API的功能与组成 JDBC API提供了3类主要核心服务:连接服务、SQL服务和结果处理服务。因此JDB
10、C API的主要功能概括起来有如下3个方面:建立与数据库的连接。向数据库发送SQL查询请求。处理数据库,并返回数据库处理结果。2022-7-19124.2.2 DriverManager驱动程序管理对象 DriverManager类是JDBC的管理层,工作在用户和驱动程序之间,它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。具体实现步骤如下:1、JDBC驱动程序接口2、加载和注册JDBC驱动3、获得Connection连接2022-7-19132022-7-19141.JDBC驱动程序接口 Java.sql.Driver是所有驱动程序需要实现的驱动器类接口。以下是几种常用数据库厂商
11、的JDBC驱动程序接口名:SQLServer数据库的JDBC驱动程序-com.microsoft.jdbc.sqlserver.SQLServerDriver Oracle数据库的JDBC驱动程序-oracle.jdbc.driver.OracleDriver MySQL数据库的JDBC驱动程序-com.mysql.jdbc.Driver2022-7-19152.加载和注册JDBC驱动DriverManager类在取得连接之前,需要加载和注册驱动程序。下面是常用驱动程序:加载ODBC的JDBC驱动类:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);加载S
12、QL Server的JDBC驱动类:Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);加载Oracle的JDBC驱动类:Class.forName(oracle.jdbc.driver.OracleDriver);加载MySQL的JDBC驱动类:Class.forName(com.mysql.jdbc.Driver);2022-7-19163.获得Connection连接 加载完数据库驱动程序之后,将建立与数据库的连接。一般需要直接通过使用DriverManager.getConnection()的方法来获得Connecti
13、on连接,具体代码如下:String dburl=jdbc:odbc:dsn名称;DriverManager.getConnection(dburl,”username”,”password”);4.2.3 Connection数据库连接对象 Connection对象又称为数据库连接对象,是用来与指定数据源创建连接的对象。Connection 对象提供了特定程序的类表示,根据数据源的不同,Connection类分为SqlConnection、OleDbConnection、OdbcConnection和OracleConnection四种。2022-7-19174.2.4 SQL声明对象1、S
14、tatement Statement对象用于执行不带参数的简单静态SQL语句,并且返回它所生成的结果对象。Statement对象的执行步骤如下:创建Statement 对象 使用 Statement 对象执行查询语句 关闭 Statemente 对象2022-7-19182022-7-19192、PreparedStatement PreparedStatement用于执行带或不带IN参数的预编译SQL语句。PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作
15、为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。2022-7-19203、CallableStatement 用于执行对数据库存储过程的调用,为所有的DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调用有两种形式:带结果参数,不带结果参数。2022-7-19214.2.5 ResultSet查询结果对象 ResultSet对象表示数据库查询所获得的结果集,即通过执行查询数据库的语句而生成的数据记录集。ResultSet 对象具有指向其当前数据行的指针。最初,
16、指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。2022-7-19224.3 MySQL数据库基础 MySQL数据库是众多的关系型数据库产品中的一个,相比较其它系统而言,MySQL数据库可以称得上是目前运行速度最快的SQL语言数据库。除了具有许多其它数据库所不具备的功能和选择之外,MySQL数据库是一种完全免费的产品,用户可以直接从网上下载数
17、据库,用于个人或商业用途,而不必支付任何费用。2022-7-19234.3.1 MySQL的安装与配置1.安装前的准备:下载MySQL安装程序包,可到MySQL官方网站下载,本书安装的MySQL版本为5.5.28,用于32位机。2.MySQL数据库的安装:只要按照安装提示安装即可安装成功。3.MySQL Server数据库的配置4.设置环境变量5.修改端口和字符集6.启动MySQL Server 5.5,用于测试MySQL 安装是否成功。2022-7-19244.3.2 SQLyog集成管理工具的安装与使用1.SQLyog集成管理工具的下载与安装SQLyog软件可以在SQLyog的官方网站(h
18、ttp:/ MySQL的使用1.创建MySQL数据库有以下三种方法来实现:(1)选择菜单“数据库”“创建数据库”,弹出创建数据库对话框。(2)右击左侧导航中“连接名localhost”“创建数据库”,弹出创建数据库对话框,如图4-20所示。(3)同时按下“Ctrl+D”,弹出创建数据库对话框。2022-7-19262.创建表和设置字段:在左侧的导航中选择所要操作的数据库(如student数据库),单击鼠标右键,从弹出的快捷菜单中选择“创/建”“表”,创建新表。在弹出的界面中,可以通过 增加列、删除列,来实现列上移或下移。通过输入列名(FieldName),设置数据类型(Datatype),设置
19、字段长度(Len),对于一些字段还可以设置相关的约束-常用的选项有主键约束(PK)、非空约束(Not Null)、自增长(Auto Increment),最终单击“保存”。2022-7-19273.数据操作 在左边导航栏选中要操作的表,右击“打开表”,然后可以直接输入相关数据,也可以通过 来完成添加或插入记录,通过 删除记录,最终通过 来完成保存数据的任务。4.备份数据 对于任何一个系统数据的备份与导出都是必须的,在左边导航栏选中要操作的表,右击“备份/导出”“备份数据库,转储到SQL”,将整个数据库的所有内容备份为SQL文件。5.导入数据 选中“连接名localhost”右击鼠标选中“执行S
20、QL脚本”。2022-7-19284.4 JDBC 数据库操作实例 JSP开发离不开后台数据库的支持,在JSP中对数据库的操作是程序开发的重点和难点。在本节中主要使用MySQL数据库为例,来讲解JDBC访问MySQL数据库的具体步骤:1.加载MySQL数据库驱动程序2.连接数据库3.使用语句对数据库进行操作4.关闭数据库连接2022-7-1929案例-使用JDBC实现对数据库表的操作 在本节中数据库以MySQL为例,将介绍在JSP页面中如何对数据库执行不同操作的方法。操作数据库主要涉及查询、增加、删除和更新等基本功能。由于前面已经新建了数据库book及其表book,它们是用于存放用户基本信息表。以表book为例,讲解如何使用JDBC来实现对表的增加、删除、修改和查询等操作方法。具体代码请参考书:4.4.2案例-使用JDBC实现对数据库表的操作。