JDBC的作用及重要接口
JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面:
    建立与数据库的连接。
    向数据库发起查询请求。
    处理数据库返回结果。
这些作用是通过一系列API实现的,其中的几个重要接口如表13-1所示。
<ccid_nobr>
| <ccid_code>表13-1 JDBC API中的重要接口 | 
这些JDBC API的组成结构如图13-2所示。

图13-2 JDBC API的组成结构
DriverManager
DriverManager类是Java.sql包中用于数据库驱动程序管理的类,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接,也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。DriverManager 类直接继承自java.lang.object,其主要成员方法如表13-2所示。
表13-2 DriverManager的主要成员方法及其含义
对于简单的应用程序,程序开发人员需要在此类中直接使用的惟一方法是 DriverManager.getConnection。该方法是用来建立与数据库的连接的。JDBC 允许用户调用 DriverManager 的方法 getDriver、getDrivers 和 registerDriver 及 Driver 的方法 connect。但多数情况下,最好让 DriverManager 类管理建立连接的细节。
Connection
Connection是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接的基础上进行的。Connection类的主要成员方法如表13-3所示。
<ccid_nobr>
| <ccid_code>表13-3 Connection类的主要成员方法及其含义 | 
Statement
Statement用于在已经建立的连接的基础上向数据库发送SQL语句的对象。它只是一个接口的定义,其中包括了执行SQL语句和获取返回结果的方法。实际上有3种 Statement 对象:Statement、PreparedStatement(继承自Statement )和 CallableStatement(继承自PreparedStatement)。它们都作为在给定连接上执行 SQL 语句的容器,每个都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。Statement 接口提供了执行语句和获取结果的基本方法;PreparedStatement 接口添加了处理 IN 参数的方法;而 CallableStatement 添加了处理 OUT 参数的方法。
创建statement对象的方法如下:
    Statement stmt = con.createStatement();
Statement接口定义中包括的方法如表13-4所示。
<ccid_nobr>
| <ccid_code>表13-4 Statement接口的主要成员方法及其含义 | 
值得注意的是,Statement 接口提供了3种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容决定。executeQuery方法用于产生单个结果集的SQL语句,如SELECT语句。executeUpdate方法用于执行INSERT、UPDATE、DELETE及DDL(数据定义语言)语句,例如CREATE TABLE 和 DROP TABLE。executeUpdate 的返回值是一个整数,表示它执行的SQL语句所影响的数据库中的表的行数(更新计数)。execute 方法用于执行返回多个结果集或多个更新计数的语句。
PreparedStatement接口继承了Statement接口,但PreparedStatement语句中包含了经过预编译的SQL语句,因此可以获得更高的执行效率。在PreparedStatement语句中可以包含多个用"?"代表的字段,在程序中可以利用setXXX方法设置该字段的内容,从而增强了程序设计的动态性。PreparedStatement接口的主要成员方法及其含义如表13-5所示。
<ccid_nobr>
| <ccid_code>表13-5 PreparedStatement接口的主要成员方法及其含义 | 
PreparedStatement与Statement的区别在于它构造的SQL语句不是完整的语句,而需要在程序中进行动态设置。这一方面增强了程序设计的灵活性;另一方面,由于PreparedStatement语句是经过预编译的,因此它构造的SQL语句的执行效率比较高。所以对于某些使用频繁的SQL语句,用PreparedStatement语句比用Statement具有明显的优势。
PreparedStatement对象的创建方法如下:
    PreparedStatement pstmt = con.prepareStatement("update tbl_User set reward = ? where userId = ?");
在该语句中,包括两个可以进行动态设置的字段:reward和userId。
例如,我们想给第一个注册的用户5000点奖励,则可以用下面的方法设置空字段的内容:
<ccid_nobr>
| <ccid_code>pstmt.setInt(1, 5000); | 
如果我们想给前50个注册的用户每人5000点奖励,则可以用循环语句对空字段进行设置:
<ccid_nobr>
| <ccid_code>pstmt.setInt(1, 5000); | 
如果传递的数据量很大,则可以通过将 IN 参数设置为 Java 输入流来完成。当语句执行时,JDBC驱动程序将重复调用该输入流,读取其内容并将它们当做实际参数数据传输。JDBC 提供了3种将IN参数设置为输入流的方法:setBinaryStream用于含有未说明字节的流;setAsciiStream用于含有ASCII字符的流;setUnicodeStream用于含有Unicode字符的流。这些方法比其他的setXXX方法要多一个用于指定流的总长度的参数,因为一些数据库在发送数据之前需要知道它传送的数据的大小。
下面是一个使用流作为 IN 参数发送文件内容的例子:
<ccid_nobr>
| <ccid_code>java.io.File file = new java.io.File("/tmp/data"); | 
当语句执行时,将反复调用输入流 fin 以传递其数据。
CallableStatement 对象用于执行对数据库已存储过程的调用。在CallableStatement对象中,有一个通用的成员方法call,这个方法用于以名称的方式调用数据库中的存储过程。在数据库调用过程中,可以通过设置IN参数向调用的存储过程提供执行所需的参数。另外,在存储过程的调用中,通过OUT参数获取存储过程的执行结果。
CallableStatement 接口的主要成员方法及其含义如表13-6所示。
<ccid_nobr>
| <ccid_code>表13-6 CallableStatement 接口的主要成员方法及其含义 | 
其中procedure_name为存储过程的名字,方括号中的内容是可选的多个用于存储过程执行的参数。CallableStatement 对象的创建方法如下:
    CallableStatement cstmt = con.prepareCall("{call getData(?, ?)}");
向存储过程传递执行需要参数的方法是通过setXXX语句完成的。例如,我们可以将两个参数设置如下:
<ccid_nobr>
| <ccid_code>cstmt.setByte(1, 25); | 
如果需要存储过程返回运行结果,则需要调用registerOutParameter方法设置存储过程的输出参数,然后调用getXXX方法来获取存储过程的执行结果。例如:
<ccid_nobr>
| <ccid_code>cstmt.registerOutParameter(1, java.sql.Types.TINYINT); | 
从上面的程序可以看出,Java的基本数据类型和SQL中支持的数据类型有一定的对应关系。这种对应关系如表13-7所示。
<ccid_nobr>
| <ccid_code>表13-7 SQL的数据类型与Java数据类型的对应关系 | 
ResultSet
结果集(ResultSet)用来暂时存放数据库查询操作获得的结果。它包含了符合 SQL 语句中条件的所有行,并且它提供了一套 get 方法对这些行中的数据进行访问。ResultSet类的主要成员方法及其含义如表13-8所示。
<ccid_nobr>
| <ccid_code>表13-8 ResultSet类的主要成员方法及其含义 | 
从表13-8中可以看出,ResultSet类不仅提供了一套用于访问数据的get方法,还提供了很多移动指针(cursor,有时也译为光标)的方法。cursor是ResultSet 维护的指向当前数据行的指针。最初它位于第一行之前,因此第一次访问结果集时通常调用 next方法将指针置于第一行上,使它成为当前行。随后每次调用 next 指针向下移动一行。(T111)
本文选自飞思图书《精通Java核心技术》
JDBC的作用及重要接口的更多相关文章
- JavaWeb学习之JDBC API中常用的接口和类
		JDBC API中包含四个常用的接口和一个类分别是: 1.Connection接口 2.Statement接口 3.PreparedStatement接口 4.ResultSet接口 5.Driver ... 
- JDBC数据库编程:PreparedStatement接口
		使用PreparedStatement进行数据库的更新及查询操作. PreparedStatement PreparedStatement是statement子接口.属于预处理. 使用statemen ... 
- JDBC数据库编程:ResultSet接口
		掌握ResultSet接口 使用ResultSet接口进行查询 ResultSet接口 在JDBC操作中,数据库所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 常用方 ... 
- JDBC中重要的类/接口-Connection、DriverManager、ResultSet、Statement及常用方法
		DriverManager(管理一组 JDBC 驱动程序的基本服务) 它的方法: getConnection(String url, String user, String password) 试图建 ... 
- JDBC课程1-实现Driver接口连接mysql数据库、通用的数据库连接方法(使用文件jdbc.properties)
		package day_18; import jdk.internal.util.xml.impl.Input; import org.junit.Test; import java.io.Input ... 
- Java 中的接口有什么作用?以及接口和其实现类的关系?
		Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ... 
- JDBC数据库编程:callableStatement接口
		了解MySQL存储过程建立, 了解存储过程中参数传递的三种方式 了解callablestatement调用存储过程操作. 因为在现在开发中,使用存储过程的地方越来越少,所以,对于存储过程使用,只需要了 ... 
- 分析mybatis和jdbc的作用,已经原理
		从jdbc的操作数据库来看:主要分为几步: 1 注冊载入JDBC驱动程序: 2 得到连接对象 Connection 3 创建 Statement对象 4 运行sql语句 5 处理结果 6 关闭资源释放 ... 
- JDBC中常用的接口
		JDBC常用的接口DriverManager 驱动管理器获得数据库链接 Connection 数据库链接接口 Statement 语句接口,用来静态操作SQL语句 PreparedStatement ... 
随机推荐
- mysql5.6新特性总结
			一. server参数默认值设置的变化http://dev.mysql.com/doc/refman/5.6/en/server-default-changes.html 二. innodb增强1.全 ... 
- 删除ORACLE的步骤
			1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 2.打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS ... 
- oracle date change
			select to_char(sysdate,'yyyy') from dual;-----2016select to_number(to_char(sysdate,'MM'))||'月' from ... 
- .htaccess下Flags速查表
			Flags是可选参数,当有多个标志同时出现时,彼此间以逗号分隔. 速查表: RewirteRule 标记 含义 描述 R Redirect 发出一个HTTP重定向 F Forbidden 禁止对URL ... 
- 成为一名优秀的Web前端开发者
			本文记录了两位工程师为web开发者们所提出的多条建议,其中一位推荐了多种实用的工具与技术,而另一位则对于如何克服浏览器开发时所面临的挑战提出了诸多建议. Rebecca Murphey是来自于Baza ... 
- android-自定义控件之液位指示器
			由于安卓应用很广泛,在工业中也常有一些应用,比如可以用安卓来去工业中的一些数据进行实现的监测,显示,同时可以做一些自动化控制,当然在这里,我不是做这些自动化控制方面的研究,只是做一个控件,液位指示,其 ... 
- SQL表旋转
			在制作报表的时候,有时候会碰到基础资料是依照时间区间去一笔一笔记录的资料,但是使用者在看报表的时候想要将时间区间以横向的方式呈现不是直向的情况出现,又或者基础资料的表数据结构是横向的而使用者在看报表的 ... 
- js⑤
			##返回在制定位置的的字符 var result = str.charAt(1); console.log(result); console.log(str[1]); ##返回在指定的位置的字符 ... 
- HBase的基本架构及其原理介绍
			1.概述:最近,有一些工程师问我有关HBase的基本架构的问题,其实这个问题仅仅说架构是非常简单,但是需要理解.在这里,我觉得可以用HDFS的架构作为借鉴.(其实像Hadoop生态系统中的大部分组建的 ... 
- PHP往mysql数据库中写入中文失败
			该类问题解决办法就是 在建立数据库连接之后,将该连接的编码方式改为中文. 代码如下: $linkID=@mysql_connect("localhost","root&q ... 
