Professional Documents
Culture Documents
回顾 1
DataInputStream 类和 DataOutputStream 类在
读 / 写数据时可以区分数据类型
绝大部分的 IO 操作都有可能抛出 IOException
本章相关词汇
单 词 说 明
driver 驱动,驱动程序
connection 连接
manager 管理器
statement 语句
prepared 预备的,预编译的
result 结果
create 创建,创造
execute 执行
query 查询
本章目标
了解 JDBC 的概念和必要性
了解 JDBC 驱动程序类型
了解 java.sql 包
理解 JDBC 程序的结构
使用 JDBC 进行数据库编程
数据库访问技术简介
当今企业级应用程序大部分采用了客户机 /
服务器( C/S )模式;
客户端机器需要与服务器进行通讯,要操
作数据库中的数据,执行
SQL ( Structured Query Language 结构
化查询语言)语句以及检索查询结果;
在 Java 中实现这些活动的技术称作 JDBC
。
数据库编程示意图
数据库编程
执行 SQL 语句
客户机 / 服务器
应用程序 数据库
检索查询结果
JDBC
关于 DBMS
Java 程序
JDBC 驱动程序
SQL 命令 结果
数据库
JDBC 驱动程序类型
使用 JDBC 连接数据库可以通过不同的驱
动方式来实现,有 4 种驱动类型:
– JDBC-ODBC 桥驱动
– 纯 Java 驱动
– 本地 API 部分 Java 驱动
– JDBC 网络纯 Java 驱动
不论采用哪种驱动方式,在程序中对数据
库的操作方式基本相同,只是加载不同的
驱动程序即可。
java.sql 包
接口名称 说 明
Connection 连接对象,用于与数据库取得连接
CallableStatement 存储过程语句对象,用于调用执行存储过程
类 名 称 说 明
数据库异常类,是其它 JDBC 异常类的根类,继
SQLException 承于 java.lang.Exception ,绝大部分对数据库进
行操作的方法都有可能抛出该异常
驱动程序管理类,用于加载和卸载各种驱动程序,
DriverManager 并建立与数据库的连接
TimeStamp 表示一个时间戳,能精确到纳秒
JDBC 程序访问数据库步骤
开 始 导入 java.sql 包
加载并注册驱动程序
创建 Connection 对象 创建 Statement 对象
关闭 Statement 对象 关闭 Connection 对象 结 束
步骤详解 1 :建立数据源
一旦成功连接到数据库,获得 Connection 对象
后,必须通过 Connection 对象的
createStatement 方法来创建语句对象,才可以
执行方SQL 语句;
法 原 型 说 明
如:
Statement sta = con.createStatement();
步骤详解 5 :执行 SQL 语句
如:
sta.executeUpdate("INSERT INTO Friends VALUES(' 田
七 ', ' 重庆 ', 456712, '2003-2-25', 7500)");
步骤详解 5 :执行 SQL 语句(续)
方 法 原 型 说 明
如:
ResultSet rs =
sta.executeQuery("SELECT * FROM Friend");
步骤详解 6 :关闭资源
当对数据库的操作结束后,应当将所有已经被打开的资
源关闭,否则将会造成资源泄漏;
Connection 对象、 Statement 对象和 ResultSet 对象都
有执行关闭的 close 方法;
函数原型都是: void close() throws SQLException
如:
rs.close(); // 关闭 ResultSet 对象
sta.close(); // 关闭 Statement 对象
con.close(); // 关闭 Connection 对象
有可能抛出 SQLException 异常,必须捕捉;
请注意关闭的顺序,最后打开的资源最先关闭,最先打
开的资源最后关闭。
数据库操作示例
import java.sql.*; // 导入 java.sql 包
public class JDBCDemo {
public static void main(String[] args) {
String strCon = "jdbc:odbc:myODBC"; // 连接字符串
String strUser = "sa"; // 数据库用户名
String strPwd = ""; // 口令
System.out.println(" 正在连接数据库 ...");
try { // 监控异常
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 加载驱动程序
Connection con;
// 获得连接对象
con = DriverManager.getConnection(strCon, strUser, strPwd);
System.out.println(" 成功连接到数据库。 ");
Statement sta = con.createStatement(); // 创建语句对象
// 执行 SQL 语句
String strSql = "DELETE FROM Friends WHERE [Name] = ' 郑六 '";
int count = sta.executeUpdate(strSql);
System.out.println(" 成功删除 " + count + " 行数据。 ");
sta.close(); con.close(); // 关闭所有已经打开的资源
} catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); }
catch (SQLException sqle) { sqle.printStackTrace(); } }
}
操作结果集
try {
String strCon = "jdbc:odbc:MyODBC";
System.out.println(" 正在连接数据库 ...");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con;
con = DriverManager.getConnection(strCon, "sa", "");
System.out.println(" 成功连接到数据库。 ");
Statement sta = con.createStatement();
ResultSet rs = sta.executeQuery("SELECT * FROM Friends");
System.out.println(" 查询到数据如下: ");
while (rs.next()) { // 循环将结果集游标往下移动,到达末尾返回 false
// 根据字段名称获得各个字段的值
System.out.print(rs.getString("Name") + "\t"); // 获得字符串
System.out.print(rs.getString("Address") + "\t"); // 获得字符串
System.out.print(rs.getInt("Telephone") + "\t"); // 获得整数
System.out.print(rs.getDate("HireDate") + "\t"); // 获得日期型数据
System.out.println(rs.getFloat("Salary")); // 获得浮点型数据
}
rs.close(); sta.close(); con.close();
} catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); }
catch (SQLException sqle) { sqle.printStackTrace(); }
PreparedStatement 接口 1
方 法 原 型 说 明
void setX(int parameterIndex, X 将 parameterIndex 指定的“ ?” 位置指定为 x
x) 的值,这里 X 可以指代任意数据类型, “ ?”
throws SQLException 的索引从 1 开始。
如:
ps.setString(1, " 长沙 ");
ps.setString(2, " 王五 ");
PreparedStatement 接口 3
设置好每个参数的值之后,就可以使用
PreparedStatement 对象的 executeUpdate 和
executeQuery 方法来执行 SQL 语句,这一点和
Statement
方 法 原对象很相似:
型 说 明
PreparedStatement ps;
// 使用带参数的 SQL 语句创建 PreparedStatement 对象
ps = con.prepareStatement("UPDATE Friends SET Address = ? WHERE Name = ?");
// 设置 SQL 语句中的参数值
ps.setString(1, " 长沙 ");
ps.setString(2, " 王五 ");
int count = ps.executeUpdate(); // 执行命令
使用 JDBC-ODBC 桥方式连接数据库,其性能完
全取决于数据源( ODBC )的性能,并且无法脱
离 Microsoft 的平台,这样将带来不便;
大部分 DBMS 产商都为自己的产品开发了纯 Java
的驱动程序,我们只需要加载相应的驱动,就可以
直接连接到数据库,而无需通过 ODBC 桥连接;
鉴于 DBMS 产品太多,这里只针对当今比较流行
的 SQL Server 2000 和 Oracle 9i 进行介绍。
下载驱动程序包