Designed by Chiyong,?20051
Java2 网络编程基础
JDBC
第十一章
Designed by Chiyong,?20052
回顾
Designed by Chiyong,?20053
目标
JDBC简介
JDBC的类型
JDBC的组成部分和使用
PreparedStatement接口
CallableStatement接口
Designed by Chiyong,?20054
JDBC 简介 - 1
JDBC (Java DataBase Connectivity)是一种可用于执行 SQL语句的 Java API(Application
Programming Interface)
由 Java语言书写的类和界面组成
引入 JDBC意义:
为开发人员提供了一种标准的应用程序设计接口
使开发人员可以用纯 Java代码编写数据库应用程序
Designed by Chiyong,?20055
从 ODBC到 JDBC的发展历程
ODBC的发展
开放式数据库连接( Open Database Connectivity)
SQL标准,ANSI(美国国家标准化组织)的 SQL-
89,SQL-92,SQL-3
其它 SQL标准化组织,SAG,ISO,X/OPEN,IBM等
微软公司的 ODBC接口遵循以上 SQL标准化组织对
SQL接口的定义,
支持的软件环境有,Excel,Word,Access,Visual
Basic,FoxPro,Microsoft SQL Server,Visual C++等
Designed by Chiyong,?20056
ODBC的模型结构
ODBC有四个主要组成部分,应用 程序接口,驱动器管理器,数据库驱动器和数据源
ODBC应用程序接口( ODBC API)
ODBC驱动器管理器( DriverManager)
ODBC数据库驱动器( Driver)
应用程序 1 应用程序 2 应用程序 3 ……
Oracle SyBase SQL Server Access ……
Designed by Chiyong,?20057
JDBC 简介 - 2
JDBC的诞生:
自 1995年 5月 java语言公布以来,当时由于没有一个纯
java语言的 API,编程人员不得不在 Java程序中加入 C
语言函数的 ODBC调用
JNI缺点有,Java的平台无关性,面向对象等优势无法发挥
自 JDK1.0.x版本开始出现,到 JDK1.1,SQL类包成为
Java语言的标准部件
使 Java语言与数据库连接时真正实现,Write
Once,Run Anywhere!”
JDBC API 能完成:
与数据库建立连接
向数据库发送 SQL 语句
检索数据库返回的结果
Designed by Chiyong,?20058
JDBC 简介 - 3
JDBC在应用程序中的作用模型:
Java应用程序
JDBC驱动管理器
JDBC-ODBC桥
ODBC
供应商提供的 JDBC驱动程序数据库
Designed by Chiyong,?20059
JDBC 简介 - 4
特性
不限制传递到底层 DBMS 驱动程序的查询类型
JDBC 机制易于理解和使用
提供与 Java 系统的其他部分保持一致的
Java 接口
Designed by Chiyong,?200510
JDBC 支持的编程模型
JDBC 支持两种模型:
二层模型( C/S)
Java applet/应用程序直接与数据库交互
被称为客户端 /服务器配置
三层模型 (C/S或 B/S)
使用中间层
可以在不同语言中实现中间层
Designed by Chiyong,?200511
JDBC 驱动程序的类型
JDBC驱动程序的类型
JDBC-ODBC 桥加 ODBC 驱动程序
使用方便,但会导致性能降低,
由于桥本身不支持分布式通讯,必须依靠 ODBC
的扩展才能实现分布式应用程序的使用
本地 API 或部分 Java驱动
需要数据库在本地安装客户端(图 1)
JDBC 网络纯 Java 驱动程序
通过中间件连接,形式灵活(图 2)
本地协议纯 Java 驱动程序(全 Java驱动)
直接与数据库通讯(图 3)
Java应用程序
DB客户端运行库数据库 图 1
Java应用程序数据库访问中间件数据库中间件服务器图 2
Java应用程序数据库 图 3
Designed by Chiyong,?200512
JDBC 简介 - 5
JDBC API的五个组成部分:
驱动程序管理器( Driver Manager)
连接( Connection)
驱动程序( Driver)
语句( Statement)
结果集( ResultSet)
Designed by Chiyong,?200513
JDBC的使用
JDBC的使用:(实例 5_1)
1)注册
DriverManager.registerDriver(driver);
2) 加载
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
3) 建立连接
Connection conn = DriverManager.getConnection(URL,
login_name,login_password);
4) 创建 Statement对象
Statement stmt = conn.createStatement();
5) 提交查询,使用 ResultSet对象获取结果集
ResultSet rs= stmt.executeUpdate(query);
6) 关闭 Statement,ResultSet,Connection对象
stmt.close();
rs.close();
conn.close();
Designed by Chiyong,?200514
注册与加载 JDBC驱动
注册
DriverManager.registerDriver(driver);
例如,String driver =
“sun.jdbc.odbc.JdbcOdbcDriver”;
用 JVM注册 JDBC驱动程序,由 DriverManager对象控制,
要建立一个连接,必须用 DriverManager对象注册一个合适的 JDBC驱动
若程序只使用一种驱动且已经注册,此步可以省略
加载
Class.forName("sun.jdbc.odbc.JdbcOdbcDrive
r");
也可写成,
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInst
ance();
Designed by Chiyong,?200515
建立连接
建立连接
Connection conn =
DriverManager.getConnection(URL,
login_name,login_password);
例如:
String url=“jdbc:odbc:goodday”;//其中
goodday为数据源名
Connection
conn=DriverManager.getConnection(url);
JDBC Driver的 URL格式:
jdbc:<subprotocal>:<subname>
而对于 odbc子协议,其格式固定为:
jdbc:odbc:<data-source-name>
Designed by Chiyong,?200516
构造 SQL 语句
Statement 对象将 SQL 语句发送到 DBMS
创建 Statement对象( 或 Preparedstatement,Callablestatement对象 )
Statement stmt = conn.createStatement();
返回结果集 ResultSet
ResultSet rs=stmt.executeQuery(“select * from tab”);
int num=stmt.executeUpdate(“insert into tab(userid)”);
boolean bool=stmt.execute(“select * from tab”);
Statement
Preparedstatement
Callablestatement对象类继承图
Designed by Chiyong,?200517
提交查询 3-1
Statement 对象的方法:
executeQuery()
主要用于 SELECT 语句
返回值是结果集
ResultSet rs = stmt.executeQuery(query);
executeUpdate()
用来创建和更新表(如,insert,delete,update,create,drop)
返回值是整型值,用以表示被影响的行数
int num = stmt.executeUpdate(query);
execute()
boolean bool = stmt.execute();
返回布尔值,用于执行任何 SQL 语句和存储过程,适用于一次返回多个结果集的情况
Designed by Chiyong,?200518
提交查询 3-2
DDL 命令 包括 create,alter 和 drop
stat.executeUpdate("create table
Customer
(CustIdnumber(3),CustNamevarchar2(15),A
ddress varchar2(30))");
DML 命令 包括 select,insert,update和 delete
RecordSet recset =
stat.executeQuery("select * from
customer");
Designed by Chiyong,?200519
提交查询 3-3
其它两个 statement对象:
Preparedstatement
其实例中包含了一个已经编译过的 SQL语句,因此,要多次执行一个 SQL语句,使用 PreparedStatement
SQL 语句在创建时提供 in参数,使用
pstmt.setXXX( );方法
用 executeUpdate() 方法执行 SQL语句
PreparedStatement pStmt =
conn.preparedStatement(
"insert into emp (empno,ename)
values(?,?)");
Callablestatement
Designed by Chiyong,?200520
显示结果
ResultSet 对象包含 SQL 语句的执行结果
使用 getXXX 方法检索数据
getInt() 用于检索整型值
getString() 用于检索字符串值例如:
while(rs.next())
{
int num = rs.getInt(1);
String str = rs.getString(“username”);
}
Designed by Chiyong,?200521
关闭 Statement和 Connection
关闭 Statement 对象
stmt.close();
关闭 ResultSet 对象
rs.close();
关闭 Connection 对象
conn.close();
Designed by Chiyong,?200522
总结
JDBC的概念
JDBC的使用
PreparedStatement接口
CallableStatement接口
Java2 网络编程基础
JDBC
第十一章
Designed by Chiyong,?20052
回顾
Designed by Chiyong,?20053
目标
JDBC简介
JDBC的类型
JDBC的组成部分和使用
PreparedStatement接口
CallableStatement接口
Designed by Chiyong,?20054
JDBC 简介 - 1
JDBC (Java DataBase Connectivity)是一种可用于执行 SQL语句的 Java API(Application
Programming Interface)
由 Java语言书写的类和界面组成
引入 JDBC意义:
为开发人员提供了一种标准的应用程序设计接口
使开发人员可以用纯 Java代码编写数据库应用程序
Designed by Chiyong,?20055
从 ODBC到 JDBC的发展历程
ODBC的发展
开放式数据库连接( Open Database Connectivity)
SQL标准,ANSI(美国国家标准化组织)的 SQL-
89,SQL-92,SQL-3
其它 SQL标准化组织,SAG,ISO,X/OPEN,IBM等
微软公司的 ODBC接口遵循以上 SQL标准化组织对
SQL接口的定义,
支持的软件环境有,Excel,Word,Access,Visual
Basic,FoxPro,Microsoft SQL Server,Visual C++等
Designed by Chiyong,?20056
ODBC的模型结构
ODBC有四个主要组成部分,应用 程序接口,驱动器管理器,数据库驱动器和数据源
ODBC应用程序接口( ODBC API)
ODBC驱动器管理器( DriverManager)
ODBC数据库驱动器( Driver)
应用程序 1 应用程序 2 应用程序 3 ……
Oracle SyBase SQL Server Access ……
Designed by Chiyong,?20057
JDBC 简介 - 2
JDBC的诞生:
自 1995年 5月 java语言公布以来,当时由于没有一个纯
java语言的 API,编程人员不得不在 Java程序中加入 C
语言函数的 ODBC调用
JNI缺点有,Java的平台无关性,面向对象等优势无法发挥
自 JDK1.0.x版本开始出现,到 JDK1.1,SQL类包成为
Java语言的标准部件
使 Java语言与数据库连接时真正实现,Write
Once,Run Anywhere!”
JDBC API 能完成:
与数据库建立连接
向数据库发送 SQL 语句
检索数据库返回的结果
Designed by Chiyong,?20058
JDBC 简介 - 3
JDBC在应用程序中的作用模型:
Java应用程序
JDBC驱动管理器
JDBC-ODBC桥
ODBC
供应商提供的 JDBC驱动程序数据库
Designed by Chiyong,?20059
JDBC 简介 - 4
特性
不限制传递到底层 DBMS 驱动程序的查询类型
JDBC 机制易于理解和使用
提供与 Java 系统的其他部分保持一致的
Java 接口
Designed by Chiyong,?200510
JDBC 支持的编程模型
JDBC 支持两种模型:
二层模型( C/S)
Java applet/应用程序直接与数据库交互
被称为客户端 /服务器配置
三层模型 (C/S或 B/S)
使用中间层
可以在不同语言中实现中间层
Designed by Chiyong,?200511
JDBC 驱动程序的类型
JDBC驱动程序的类型
JDBC-ODBC 桥加 ODBC 驱动程序
使用方便,但会导致性能降低,
由于桥本身不支持分布式通讯,必须依靠 ODBC
的扩展才能实现分布式应用程序的使用
本地 API 或部分 Java驱动
需要数据库在本地安装客户端(图 1)
JDBC 网络纯 Java 驱动程序
通过中间件连接,形式灵活(图 2)
本地协议纯 Java 驱动程序(全 Java驱动)
直接与数据库通讯(图 3)
Java应用程序
DB客户端运行库数据库 图 1
Java应用程序数据库访问中间件数据库中间件服务器图 2
Java应用程序数据库 图 3
Designed by Chiyong,?200512
JDBC 简介 - 5
JDBC API的五个组成部分:
驱动程序管理器( Driver Manager)
连接( Connection)
驱动程序( Driver)
语句( Statement)
结果集( ResultSet)
Designed by Chiyong,?200513
JDBC的使用
JDBC的使用:(实例 5_1)
1)注册
DriverManager.registerDriver(driver);
2) 加载
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
3) 建立连接
Connection conn = DriverManager.getConnection(URL,
login_name,login_password);
4) 创建 Statement对象
Statement stmt = conn.createStatement();
5) 提交查询,使用 ResultSet对象获取结果集
ResultSet rs= stmt.executeUpdate(query);
6) 关闭 Statement,ResultSet,Connection对象
stmt.close();
rs.close();
conn.close();
Designed by Chiyong,?200514
注册与加载 JDBC驱动
注册
DriverManager.registerDriver(driver);
例如,String driver =
“sun.jdbc.odbc.JdbcOdbcDriver”;
用 JVM注册 JDBC驱动程序,由 DriverManager对象控制,
要建立一个连接,必须用 DriverManager对象注册一个合适的 JDBC驱动
若程序只使用一种驱动且已经注册,此步可以省略
加载
Class.forName("sun.jdbc.odbc.JdbcOdbcDrive
r");
也可写成,
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInst
ance();
Designed by Chiyong,?200515
建立连接
建立连接
Connection conn =
DriverManager.getConnection(URL,
login_name,login_password);
例如:
String url=“jdbc:odbc:goodday”;//其中
goodday为数据源名
Connection
conn=DriverManager.getConnection(url);
JDBC Driver的 URL格式:
jdbc:<subprotocal>:<subname>
而对于 odbc子协议,其格式固定为:
jdbc:odbc:<data-source-name>
Designed by Chiyong,?200516
构造 SQL 语句
Statement 对象将 SQL 语句发送到 DBMS
创建 Statement对象( 或 Preparedstatement,Callablestatement对象 )
Statement stmt = conn.createStatement();
返回结果集 ResultSet
ResultSet rs=stmt.executeQuery(“select * from tab”);
int num=stmt.executeUpdate(“insert into tab(userid)”);
boolean bool=stmt.execute(“select * from tab”);
Statement
Preparedstatement
Callablestatement对象类继承图
Designed by Chiyong,?200517
提交查询 3-1
Statement 对象的方法:
executeQuery()
主要用于 SELECT 语句
返回值是结果集
ResultSet rs = stmt.executeQuery(query);
executeUpdate()
用来创建和更新表(如,insert,delete,update,create,drop)
返回值是整型值,用以表示被影响的行数
int num = stmt.executeUpdate(query);
execute()
boolean bool = stmt.execute();
返回布尔值,用于执行任何 SQL 语句和存储过程,适用于一次返回多个结果集的情况
Designed by Chiyong,?200518
提交查询 3-2
DDL 命令 包括 create,alter 和 drop
stat.executeUpdate("create table
Customer
(CustIdnumber(3),CustNamevarchar2(15),A
ddress varchar2(30))");
DML 命令 包括 select,insert,update和 delete
RecordSet recset =
stat.executeQuery("select * from
customer");
Designed by Chiyong,?200519
提交查询 3-3
其它两个 statement对象:
Preparedstatement
其实例中包含了一个已经编译过的 SQL语句,因此,要多次执行一个 SQL语句,使用 PreparedStatement
SQL 语句在创建时提供 in参数,使用
pstmt.setXXX( );方法
用 executeUpdate() 方法执行 SQL语句
PreparedStatement pStmt =
conn.preparedStatement(
"insert into emp (empno,ename)
values(?,?)");
Callablestatement
Designed by Chiyong,?200520
显示结果
ResultSet 对象包含 SQL 语句的执行结果
使用 getXXX 方法检索数据
getInt() 用于检索整型值
getString() 用于检索字符串值例如:
while(rs.next())
{
int num = rs.getInt(1);
String str = rs.getString(“username”);
}
Designed by Chiyong,?200521
关闭 Statement和 Connection
关闭 Statement 对象
stmt.close();
关闭 ResultSet 对象
rs.close();
关闭 Connection 对象
conn.close();
Designed by Chiyong,?200522
总结
JDBC的概念
JDBC的使用
PreparedStatement接口
CallableStatement接口