索迪教育
IT教育成就人生基于 Java 的 Web 编程技术第二章 JDBC
索迪教育
IT教育成就人生上章回顾
了解 java.net 包
掌握套接字相关类
掌握 Web 相关类索迪教育
IT教育成就人生我们的目标
了解 JDBC的概念
掌握 JDBC的使用索迪教育
IT教育成就人生简介
存储和检索信息是应用程序中执行最多的操作之一。本章将学习 Java数据库连接( JDBC)
应用程序编程接口( API)。 JDBC是一组用于执行 SQL语句的 Java API,它由一些类和接口组成,程序员可以编写纯 Java的数据库应用程序。
索迪教育
IT教育成就人生
2.1 JDBC的概念
JDBC是一个软件层,允许开发者用 Java编写客户端 /服务器应用,JDBC本身与特定的
DBMS函数无关。 JDBC API定义了应用程序如何打开数据库的连接、与数据库通信、执行 SQL语句以及检索查询结果。
索迪教育
IT教育成就人生
2.1.1 JDBC的作用
下图说明了 JDBC的作用。
应用程序 JDBC API JDBC驱动程序管理器 JDBC驱动程序网络协议 /API
数据库数据库服务器索迪教育
IT教育成就人生
2.1.2 JDBC的特性
JDBC是一个设计紧凑、简单的接口,主要用于执行原始 SQL语句并检索结果。下面是 JDBC的特性。
它不限制传递到底层 DBMS驱动程序的查询的类型
JDBC机制易于理解和使用
它提供与 Java系统的其他部分保持一致的 Java接口
JDBC可以在常见 SQL层 API上实现
Microsoft ODBC API提供连接几乎所有的数据库,
是使用最广泛的访问关系数据库的编程接口。但是,
ODBC不能直接与 Java程序一起使用,因此就出现了对 JDBC的需求。
使用 JDBC API可以访问 Sybase,Oracle,Informin
和 Ingres等各种关系数据库,JDBC可以使用 SQL语句检索以上任何数据库的数据。
索迪教育
IT教育成就人生
2.1.3 SQL的一致性
结构化查询语言( SQL)是用于访问关系数据库的标准语句。不幸的是,目前没有为
SQL设立的标准,例如,不同数据库的不同数据类型的变化就可能带来一些问题。 JDBC
在类 java.sql.Types中定义了一组通用 SQL类型标识符。
索迪教育
IT教育成就人生
2.1.4 处理 SQL一致性的方法
JDBC以下列方式处理 SQL的一致性:
允许将任何查询字符串传递到底层 DBMS驱动程序。但是可能在某些 DBMS上发生错误。
提供内置功能,便于将包含转义序列的 SQL查询转换为数据库可理解的格式。
提供 DatabaseMetaData接口,允许用户检索关于所使用的 DBMS的信息。
,符合 JDBC”这个称谓的建立是为了设置用户可依赖的标准级 JDBC功能,只有 ANSI SQL 2入门级支持的驱动程序才能称为“符合 JDBC”。一致性测试检查在
JDBC API和 SQL入门级功能中定义的所有类和方法是否存在。
索迪教育
IT教育成就人生
2.1.5 JDBC驱动程序模型
JDBC支持二层和三层模型。
二层模式
在这种模型中,Java applet或应用程序与数据库直接交互,
JDBC驱动程序与正在访问的特定数据库管理系统进行通信。
SQL语句被发送到数据库,结果提供给用户。这种模型被称为客户端/服务器模型,其中应用程序是客户端,安装数据库的机器是服务器。
三层模型
这种模型引入了中间层,用于下列用途:
从客户端收集 SQL语句并将其传递到数据库
接收来自数据库的结果,发送给客户端
维护对数据访问和更新的控制索迪教育
IT教育成就人生
2.2 JDBC驱动程序的类型
JDBC包含三个组件:应用程序、驱动程序管理器和驱动程序。应用程序调用 JDBC方法,将 SQL语句发送到数据库并检索结果。 JDBC驱动程序管理器将
Java应用程序连接到正确的 JDBC驱动程序。 JDBC
驱动程序测试套件用于保证已安装的 JDBC驱动程序是“符合 JDBC”的。
有四种不同类型的 JDBC驱动程序:
JDBC-ODBC桥加 ODBC驱动程序
本地 API
JDBC网络纯 Java驱动程序
本地协议纯 Java驱动程序索迪教育
IT教育成就人生
2.2.1 类型一
JDBC-ODBC桥加 ODBC驱动程序客户端
JDBC-
ODBC桥
ODBC
驱动程序供应商 DB库服务器数据库服务器
JavaSoft桥产品利用 ODBC
驱动程序提供 JDBC访问,
但是 ODBC会带来很多缺陷和限制。由于 ODBC驱动程序必须安装在每台客户端机器上,所以选择这种类型的驱动程序对大型网络来说是不可取的。
索迪教育
IT教育成就人生
2.2.2 类型二
本地 API
这种驱动程序将客户端 API上的 JDBC调用转换为
Oracle,Sybase,Informix或其他 DBMS的调用。
但是,像桥驱动程序一样,它必须在所有客户端上加载某些二进制代码,所以不适合于大型网络。
客户端本地 API
供应商 DB库服务器数据库服务器索迪教育
IT教育成就人生
2.2.3 类型三
JDBC网络纯 Java驱动程序
这种驱动程序将 JDBC转换为与 DBMS无关的网络协议,这种协议又被某个服务器转换为一种 DBMS
协议。这种网络服务器中间件能够将它的纯 Java
客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。
客户端
JDBC网络纯 Java
驱动程序服务器中间件服务器数据库服务器服务器索迪教育
IT教育成就人生
2.2.4 类型四
本地协议纯 Java驱动程序
这类驱动程序将 JDBC调用直接转换为 DBMS所使用的网络协议。来自客户端机器上的请求可直接调用 DBMS服务器。
第三种和第四种驱动程序是使用 JDBC驱动程序访问数据库的首选方式。
客户端本地协议纯 Java
驱动程序数据库服务器服务器索迪教育
IT教育成就人生
2.3 注册 JDBC驱动程序
JDBC驱动程序必须先通过驱动程序管理器注册,然后才能用于建立数据库连接.要注册驱动程序,可使用方法 registerDriver():
DriverManager,registerDriver(drvr);
其中,drvr是要通过 DriverManager注册的新 JDBC驱动程序.
驱动程序管理器的任务是维护 JDBC客户端的所有可用驱动程序对象.要加载 JDBC驱动程序,可以使用 Class.forName()方法:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Class.forName()是一个静态方法,用于指示 java虚拟机动态地查找、加载和链接指定类(如果尚未加载).如果无法找到这个类,则抛出 ClassNotFoundException.
索迪教育
IT教育成就人生
2.4 建立 JDBC连接
一旦加载了有效的驱动程序,就可以用它建立数据库的连接,JDBC连接由“数据库 URL”标识,它告诉驱动程序管理器使用哪个驱动程序和数据源.数据库
URL的语法如下:
jdbc:<subprotocol>:<subname>
其中,subprotocol是有效 JDBC驱动程序的名称,
subname通常是指映射到物理数据库的逻辑名称或别名.
数据库连接是使用 DriverManager对象的静态方法
getConnection()建立的:
Connection conn= DriverManager,getConnection(url,
login_name,login_password);
索迪教育
IT教育成就人生
2.5 构造 SQL语句
一旦建立了连接,便可由 Statement对象将
SQL语句发送到 DBMS。对于 SELECT语句,
可使用 executeQuery(),对于创建或修改表的语句,可使用 executeUpdate()。
创建 Statement对象需要激活连接的实例。下面的语句使用 Connection对象 conn来创建
Statement对象 stmt:
Statement stmt=conn.createStatement();
索迪教育
IT教育成就人生
2.6 提交查询
这时 stmt已存在,需要通过用于执行 stmt的方法来提交查询。下面的语句提交一个
UPDATE操作。
stmt.executeUpdate(“UPDATE EMP SET
EMPNAME=?ALLEN? WHERE EMPNO=7369”);
还可以将 SQL语句指定给 String变量,例如:
String query=,UPDATE EMP SET
EMPNAME=?ALLEN? WHERE EMPNO=7369”;
stmt.executeUpdate(query);
索迪教育
IT教育成就人生
2.6.1 Statement对象方法
Statement对象的主要方法有三个:
executeUpdate()
executeQuery()
execute()
executeUpdate()方法用来创建和更新表。实际上,
executeUpdate()更多是用于更新表,因为表是一次创建,多次更新的。
executeQuery()方法用于执行 SELECT语句。
stmt,executeQuery(query);
其中,stmt为 Statement对象,query为将要执行的查询,此方法返回一个 ResultSet。
stmt,execute (query);
其中,stmt为 Statement对象,query为 SQL语句,此方法用于执行可能返回多个结果的 SQL语句,返回为一布尔值,如果 SQL
语句的结果为 ResultSet,则返回 true,否则返回 false。
索迪教育
IT教育成就人生
2.6.2 执行 DDL命令
DDL(数据定义语言)命令包括 create,
alter和 drop,下面是使用 DDL命令创建表的例子。
Statement stmt=conn.createStatement();
Stmt.executeUpdate(“create table
Customer(CustId number(3),CustName
varchar2(15),Address varchar2(30))”);
System.out.println(“表 Customer已创建” );
索迪教育
IT教育成就人生
2.6.3 执行 DML命令
DML(数据操纵语句)命令包括 select、
insert,update和 delete命令。下面的代码片段介绍如何执行 DML命令。
ResultSet recset=stmt.executeQuery(“select * from
Customer”);
索迪教育
IT教育成就人生
2.7 显示结果
SQL语句的结果存储在 ResultSet对象中。要从 ResultSet检索数据,则需要使用 getXXX方法。这些方法检索数据,并将数据转换为
Java原始数据类型。每种数据类型都具有独立的 getXXX方法,例如,getInt()用于检索整型值,getString()用于检索字符串值。
getXXX方法接受一个参数,即 ResultSet中列的索引,返回该列相应的值。要在 ResultSet
中移到下一行,可使用 ResultSet对象的 next()
方法。
索迪教育
IT教育成就人生
2.8 关闭 Statement和 Connection
由于打开连接可能导致问题的出现,所以有必要关闭连接。一旦操作完成便关闭连接,这是一个良好的编程习惯。 close()方法用于关闭 Statement和 Connection。
关闭 Statement的语法如下:
stmt.close();
其中,stmt是要关闭的 Statement对象。此方法立即释放 stmt的 JDBC资源,返回类型为 void。
关闭 Connection对象的语法如下:
conn.close();
其中,conn是要关闭的 Connection对象。此方法立即释放 conn的 JDBC资源,返回类型为 void。
索迪教育
IT教育成就人生
2.9 PreparedStatement接口
如果要多次执行一个 SQL语句,可以使用
PreparedStatement,这通常会减少执行时间。
对 PreparedStatement而言,SQL语句在创建时被作为一个参数提供,在执行
PreparedStatement时,SQL语句已经存在于数据库中。 SQL语句是在数据库中编译的,
这意味着在执行 PreparedStatement时,
DBMS只运行 PreparedStatement的 SQL语句,
而不必先编译它。 PreparedStatement可以用不同的参数值多次调用。
索迪教育
IT教育成就人生
2.9 PreparedStatement接口(续)
PreparedStatement对象是这样创建的:
PreparedStatement pStmt=conn,preparedStatement(“insert
into emp(empno,ename) values(?,?)”);
以上 SQL语句中的问号表示参数,它们可以在每次调用 PreparedStatement时修改。
创建了 PreparedStatement对象后,可以在执行
PreparedStatement对象之前赋值以取代问号。
要为 PreparedStatement中的所有问号赋值,则可以使用 setXXX方法。如果要用整型值代替问号,可以使用 setInt()方法。如果要用字符串值代替问号,可以使用 setString()方法。对于其他原始类型,都可以使用类似的语法。
索迪教育
IT教育成就人生
2.10 CallableStatement接口
CallableStatement用于执行 SQL存储过程,存储过程是执行特定操作的子程序。 CallableStatement对象扩展了
PreparedStatement。 CallableStatement类中的方法用于指定输入参数和检索返回值。
CallableStatement对象是使用 Connection对象创建的。
下面将创建名为 showEmployees的存储过程,它根据工号查询员工姓名。
Create or replace procedure showEmployees
(name out varchar2,num in number)
Is
Begin
select ename into name from emp where empno=num;
End;
索迪教育
IT教育成就人生
2.10 CallableStatement接口(续)
下面的代码调用刚才生成的存储过程。
CallableStatement cs=conn.prepareCall(“{call
showEmployees(?,?)}”);
cs.registerOutParameter(1,java.sql.Types.CHAR);
cs.setInt(2,7777);
cs.execute();
String str=cs.getString(1);
索迪教育
IT教育成就人生
2.10 CallableStatement接口(续)
对存储过程的调用必须用大括号括起,它是存储过程的转义语法。当驱动程序遇到 {call showEmployees(?,?)}时,它会将该转义语法转换为数据库使用的本地 SQL,从而调用名为 showEmployees的存储过程。
其中,?”占位符为 IN,OUT还是 INOUT参数,取决于存储过程。
OUT参数要使用 registerOutParameter()方法进行注册登记:
public void registerOutParameter(int parameterIndex,int sqlType) throws
SQLException
其中,整型为 java.sql.Types.Integer,字符型为 java.sql.Types.CHAR,其余类型请参考有关资料。
IN参数使用 setXXX()方法设置实际值,例如,设置字符串参数为:
public void setString(int parameterIndex,String x) throws SQLException
OUT参数使用 getXXX()方法取得返回值,例如,取得字符串的方法为:
public void getString(int parameterIndex) throws SQLException
索迪教育
IT教育成就人生本章小结
JDBC代表 Java数据库连接。它是一个软件层,允许开发者在 Java中编写客户端 /服务器应用。
JDBC是一个简单的接口,主要用于执行原始 SQL语句并检索结果。
连接数据库的基本过程是这样的:注册 JDBC驱动程序,建立数据库连接,执行 SQL语句,显示结果,然后关闭数据库连接。
JDBC的组件为应用程序、驱动程序管理器和驱动程序。
有四种不同类型的 JDBC驱动程序。
JDBC API定义了一组用于与数据库通信的接口和类。这些接口和类位于 java.sql包中。
SQL语句的结果存储在 ResultSet对象中。 getXXX方法用于从 ResultSet
检索数据。
ResultSet.next()方法用于移到 ResultSet中的下一行。
如果需要多次执行一个 SQL语句,可以使用 PreparedStatement。
CallableStatement用于执行 SQL存储过程。
IT教育成就人生基于 Java 的 Web 编程技术第二章 JDBC
索迪教育
IT教育成就人生上章回顾
了解 java.net 包
掌握套接字相关类
掌握 Web 相关类索迪教育
IT教育成就人生我们的目标
了解 JDBC的概念
掌握 JDBC的使用索迪教育
IT教育成就人生简介
存储和检索信息是应用程序中执行最多的操作之一。本章将学习 Java数据库连接( JDBC)
应用程序编程接口( API)。 JDBC是一组用于执行 SQL语句的 Java API,它由一些类和接口组成,程序员可以编写纯 Java的数据库应用程序。
索迪教育
IT教育成就人生
2.1 JDBC的概念
JDBC是一个软件层,允许开发者用 Java编写客户端 /服务器应用,JDBC本身与特定的
DBMS函数无关。 JDBC API定义了应用程序如何打开数据库的连接、与数据库通信、执行 SQL语句以及检索查询结果。
索迪教育
IT教育成就人生
2.1.1 JDBC的作用
下图说明了 JDBC的作用。
应用程序 JDBC API JDBC驱动程序管理器 JDBC驱动程序网络协议 /API
数据库数据库服务器索迪教育
IT教育成就人生
2.1.2 JDBC的特性
JDBC是一个设计紧凑、简单的接口,主要用于执行原始 SQL语句并检索结果。下面是 JDBC的特性。
它不限制传递到底层 DBMS驱动程序的查询的类型
JDBC机制易于理解和使用
它提供与 Java系统的其他部分保持一致的 Java接口
JDBC可以在常见 SQL层 API上实现
Microsoft ODBC API提供连接几乎所有的数据库,
是使用最广泛的访问关系数据库的编程接口。但是,
ODBC不能直接与 Java程序一起使用,因此就出现了对 JDBC的需求。
使用 JDBC API可以访问 Sybase,Oracle,Informin
和 Ingres等各种关系数据库,JDBC可以使用 SQL语句检索以上任何数据库的数据。
索迪教育
IT教育成就人生
2.1.3 SQL的一致性
结构化查询语言( SQL)是用于访问关系数据库的标准语句。不幸的是,目前没有为
SQL设立的标准,例如,不同数据库的不同数据类型的变化就可能带来一些问题。 JDBC
在类 java.sql.Types中定义了一组通用 SQL类型标识符。
索迪教育
IT教育成就人生
2.1.4 处理 SQL一致性的方法
JDBC以下列方式处理 SQL的一致性:
允许将任何查询字符串传递到底层 DBMS驱动程序。但是可能在某些 DBMS上发生错误。
提供内置功能,便于将包含转义序列的 SQL查询转换为数据库可理解的格式。
提供 DatabaseMetaData接口,允许用户检索关于所使用的 DBMS的信息。
,符合 JDBC”这个称谓的建立是为了设置用户可依赖的标准级 JDBC功能,只有 ANSI SQL 2入门级支持的驱动程序才能称为“符合 JDBC”。一致性测试检查在
JDBC API和 SQL入门级功能中定义的所有类和方法是否存在。
索迪教育
IT教育成就人生
2.1.5 JDBC驱动程序模型
JDBC支持二层和三层模型。
二层模式
在这种模型中,Java applet或应用程序与数据库直接交互,
JDBC驱动程序与正在访问的特定数据库管理系统进行通信。
SQL语句被发送到数据库,结果提供给用户。这种模型被称为客户端/服务器模型,其中应用程序是客户端,安装数据库的机器是服务器。
三层模型
这种模型引入了中间层,用于下列用途:
从客户端收集 SQL语句并将其传递到数据库
接收来自数据库的结果,发送给客户端
维护对数据访问和更新的控制索迪教育
IT教育成就人生
2.2 JDBC驱动程序的类型
JDBC包含三个组件:应用程序、驱动程序管理器和驱动程序。应用程序调用 JDBC方法,将 SQL语句发送到数据库并检索结果。 JDBC驱动程序管理器将
Java应用程序连接到正确的 JDBC驱动程序。 JDBC
驱动程序测试套件用于保证已安装的 JDBC驱动程序是“符合 JDBC”的。
有四种不同类型的 JDBC驱动程序:
JDBC-ODBC桥加 ODBC驱动程序
本地 API
JDBC网络纯 Java驱动程序
本地协议纯 Java驱动程序索迪教育
IT教育成就人生
2.2.1 类型一
JDBC-ODBC桥加 ODBC驱动程序客户端
JDBC-
ODBC桥
ODBC
驱动程序供应商 DB库服务器数据库服务器
JavaSoft桥产品利用 ODBC
驱动程序提供 JDBC访问,
但是 ODBC会带来很多缺陷和限制。由于 ODBC驱动程序必须安装在每台客户端机器上,所以选择这种类型的驱动程序对大型网络来说是不可取的。
索迪教育
IT教育成就人生
2.2.2 类型二
本地 API
这种驱动程序将客户端 API上的 JDBC调用转换为
Oracle,Sybase,Informix或其他 DBMS的调用。
但是,像桥驱动程序一样,它必须在所有客户端上加载某些二进制代码,所以不适合于大型网络。
客户端本地 API
供应商 DB库服务器数据库服务器索迪教育
IT教育成就人生
2.2.3 类型三
JDBC网络纯 Java驱动程序
这种驱动程序将 JDBC转换为与 DBMS无关的网络协议,这种协议又被某个服务器转换为一种 DBMS
协议。这种网络服务器中间件能够将它的纯 Java
客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。
客户端
JDBC网络纯 Java
驱动程序服务器中间件服务器数据库服务器服务器索迪教育
IT教育成就人生
2.2.4 类型四
本地协议纯 Java驱动程序
这类驱动程序将 JDBC调用直接转换为 DBMS所使用的网络协议。来自客户端机器上的请求可直接调用 DBMS服务器。
第三种和第四种驱动程序是使用 JDBC驱动程序访问数据库的首选方式。
客户端本地协议纯 Java
驱动程序数据库服务器服务器索迪教育
IT教育成就人生
2.3 注册 JDBC驱动程序
JDBC驱动程序必须先通过驱动程序管理器注册,然后才能用于建立数据库连接.要注册驱动程序,可使用方法 registerDriver():
DriverManager,registerDriver(drvr);
其中,drvr是要通过 DriverManager注册的新 JDBC驱动程序.
驱动程序管理器的任务是维护 JDBC客户端的所有可用驱动程序对象.要加载 JDBC驱动程序,可以使用 Class.forName()方法:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Class.forName()是一个静态方法,用于指示 java虚拟机动态地查找、加载和链接指定类(如果尚未加载).如果无法找到这个类,则抛出 ClassNotFoundException.
索迪教育
IT教育成就人生
2.4 建立 JDBC连接
一旦加载了有效的驱动程序,就可以用它建立数据库的连接,JDBC连接由“数据库 URL”标识,它告诉驱动程序管理器使用哪个驱动程序和数据源.数据库
URL的语法如下:
jdbc:<subprotocol>:<subname>
其中,subprotocol是有效 JDBC驱动程序的名称,
subname通常是指映射到物理数据库的逻辑名称或别名.
数据库连接是使用 DriverManager对象的静态方法
getConnection()建立的:
Connection conn= DriverManager,getConnection(url,
login_name,login_password);
索迪教育
IT教育成就人生
2.5 构造 SQL语句
一旦建立了连接,便可由 Statement对象将
SQL语句发送到 DBMS。对于 SELECT语句,
可使用 executeQuery(),对于创建或修改表的语句,可使用 executeUpdate()。
创建 Statement对象需要激活连接的实例。下面的语句使用 Connection对象 conn来创建
Statement对象 stmt:
Statement stmt=conn.createStatement();
索迪教育
IT教育成就人生
2.6 提交查询
这时 stmt已存在,需要通过用于执行 stmt的方法来提交查询。下面的语句提交一个
UPDATE操作。
stmt.executeUpdate(“UPDATE EMP SET
EMPNAME=?ALLEN? WHERE EMPNO=7369”);
还可以将 SQL语句指定给 String变量,例如:
String query=,UPDATE EMP SET
EMPNAME=?ALLEN? WHERE EMPNO=7369”;
stmt.executeUpdate(query);
索迪教育
IT教育成就人生
2.6.1 Statement对象方法
Statement对象的主要方法有三个:
executeUpdate()
executeQuery()
execute()
executeUpdate()方法用来创建和更新表。实际上,
executeUpdate()更多是用于更新表,因为表是一次创建,多次更新的。
executeQuery()方法用于执行 SELECT语句。
stmt,executeQuery(query);
其中,stmt为 Statement对象,query为将要执行的查询,此方法返回一个 ResultSet。
stmt,execute (query);
其中,stmt为 Statement对象,query为 SQL语句,此方法用于执行可能返回多个结果的 SQL语句,返回为一布尔值,如果 SQL
语句的结果为 ResultSet,则返回 true,否则返回 false。
索迪教育
IT教育成就人生
2.6.2 执行 DDL命令
DDL(数据定义语言)命令包括 create,
alter和 drop,下面是使用 DDL命令创建表的例子。
Statement stmt=conn.createStatement();
Stmt.executeUpdate(“create table
Customer(CustId number(3),CustName
varchar2(15),Address varchar2(30))”);
System.out.println(“表 Customer已创建” );
索迪教育
IT教育成就人生
2.6.3 执行 DML命令
DML(数据操纵语句)命令包括 select、
insert,update和 delete命令。下面的代码片段介绍如何执行 DML命令。
ResultSet recset=stmt.executeQuery(“select * from
Customer”);
索迪教育
IT教育成就人生
2.7 显示结果
SQL语句的结果存储在 ResultSet对象中。要从 ResultSet检索数据,则需要使用 getXXX方法。这些方法检索数据,并将数据转换为
Java原始数据类型。每种数据类型都具有独立的 getXXX方法,例如,getInt()用于检索整型值,getString()用于检索字符串值。
getXXX方法接受一个参数,即 ResultSet中列的索引,返回该列相应的值。要在 ResultSet
中移到下一行,可使用 ResultSet对象的 next()
方法。
索迪教育
IT教育成就人生
2.8 关闭 Statement和 Connection
由于打开连接可能导致问题的出现,所以有必要关闭连接。一旦操作完成便关闭连接,这是一个良好的编程习惯。 close()方法用于关闭 Statement和 Connection。
关闭 Statement的语法如下:
stmt.close();
其中,stmt是要关闭的 Statement对象。此方法立即释放 stmt的 JDBC资源,返回类型为 void。
关闭 Connection对象的语法如下:
conn.close();
其中,conn是要关闭的 Connection对象。此方法立即释放 conn的 JDBC资源,返回类型为 void。
索迪教育
IT教育成就人生
2.9 PreparedStatement接口
如果要多次执行一个 SQL语句,可以使用
PreparedStatement,这通常会减少执行时间。
对 PreparedStatement而言,SQL语句在创建时被作为一个参数提供,在执行
PreparedStatement时,SQL语句已经存在于数据库中。 SQL语句是在数据库中编译的,
这意味着在执行 PreparedStatement时,
DBMS只运行 PreparedStatement的 SQL语句,
而不必先编译它。 PreparedStatement可以用不同的参数值多次调用。
索迪教育
IT教育成就人生
2.9 PreparedStatement接口(续)
PreparedStatement对象是这样创建的:
PreparedStatement pStmt=conn,preparedStatement(“insert
into emp(empno,ename) values(?,?)”);
以上 SQL语句中的问号表示参数,它们可以在每次调用 PreparedStatement时修改。
创建了 PreparedStatement对象后,可以在执行
PreparedStatement对象之前赋值以取代问号。
要为 PreparedStatement中的所有问号赋值,则可以使用 setXXX方法。如果要用整型值代替问号,可以使用 setInt()方法。如果要用字符串值代替问号,可以使用 setString()方法。对于其他原始类型,都可以使用类似的语法。
索迪教育
IT教育成就人生
2.10 CallableStatement接口
CallableStatement用于执行 SQL存储过程,存储过程是执行特定操作的子程序。 CallableStatement对象扩展了
PreparedStatement。 CallableStatement类中的方法用于指定输入参数和检索返回值。
CallableStatement对象是使用 Connection对象创建的。
下面将创建名为 showEmployees的存储过程,它根据工号查询员工姓名。
Create or replace procedure showEmployees
(name out varchar2,num in number)
Is
Begin
select ename into name from emp where empno=num;
End;
索迪教育
IT教育成就人生
2.10 CallableStatement接口(续)
下面的代码调用刚才生成的存储过程。
CallableStatement cs=conn.prepareCall(“{call
showEmployees(?,?)}”);
cs.registerOutParameter(1,java.sql.Types.CHAR);
cs.setInt(2,7777);
cs.execute();
String str=cs.getString(1);
索迪教育
IT教育成就人生
2.10 CallableStatement接口(续)
对存储过程的调用必须用大括号括起,它是存储过程的转义语法。当驱动程序遇到 {call showEmployees(?,?)}时,它会将该转义语法转换为数据库使用的本地 SQL,从而调用名为 showEmployees的存储过程。
其中,?”占位符为 IN,OUT还是 INOUT参数,取决于存储过程。
OUT参数要使用 registerOutParameter()方法进行注册登记:
public void registerOutParameter(int parameterIndex,int sqlType) throws
SQLException
其中,整型为 java.sql.Types.Integer,字符型为 java.sql.Types.CHAR,其余类型请参考有关资料。
IN参数使用 setXXX()方法设置实际值,例如,设置字符串参数为:
public void setString(int parameterIndex,String x) throws SQLException
OUT参数使用 getXXX()方法取得返回值,例如,取得字符串的方法为:
public void getString(int parameterIndex) throws SQLException
索迪教育
IT教育成就人生本章小结
JDBC代表 Java数据库连接。它是一个软件层,允许开发者在 Java中编写客户端 /服务器应用。
JDBC是一个简单的接口,主要用于执行原始 SQL语句并检索结果。
连接数据库的基本过程是这样的:注册 JDBC驱动程序,建立数据库连接,执行 SQL语句,显示结果,然后关闭数据库连接。
JDBC的组件为应用程序、驱动程序管理器和驱动程序。
有四种不同类型的 JDBC驱动程序。
JDBC API定义了一组用于与数据库通信的接口和类。这些接口和类位于 java.sql包中。
SQL语句的结果存储在 ResultSet对象中。 getXXX方法用于从 ResultSet
检索数据。
ResultSet.next()方法用于移到 ResultSet中的下一行。
如果需要多次执行一个 SQL语句,可以使用 PreparedStatement。
CallableStatement用于执行 SQL存储过程。