文章目录
1. JDBC 简介
1.1 JDBC概念
JDBC代表Java数据库连接(Java Database Connectivity
),它是用于Java编程语言和数据库之间的与数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API。
JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
执行流程:
- 连接数据源,如:数据库。
- 为数据库传递查询和更新指令。
- 处理数据库响应并返回的结果。
1.2 JDBC应用范围
从根本上说,JDBC是一个规范,它提供了一整套接口,允许以一种可移植的访问底层数据库API。 Java可以用它来编写不同类型的可执行文件,如
- Java应用程序
- Java Applet
- Java Servlets
- Java ServerPages(JSP)企业级
- JavaBeans(EJB)
所有这些不同的可执行文件都能够使用JDBC驱动程序来访问数据库,并用于存储数据到数据库中。
JDBC提供与ODBC相同的功能,允许Java程序包含与数据库无关的代码(同样的代码,只需要指定使用的数据库类型,不需要重修改数据库查询或操作代码)。
1.3 安装数据库驱动程序
最新的JDK包括一个JDBC-ODBC桥接驱动程序,它使大多数开放数据库连接(ODBC)驱动程序可用于使用JDBC API的程序序。
大多数数据库供应商都在提供适当的JDBC驱动程序以及数据库安装。 所以,不应该担心这部分。
2. JDBC架构
分为双层架构和三层架构:
2.1 JDBC双层架构
JDBC API支持用于数据库访问的两层和三层处理模型,但通常,JDBC体系结构由两层组成:
JDBC API
:提供应用程序到JDBC管理器连接。JDBC驱动程序API
:支持JDBC管理器到驱动程序连接。
以下是架构图,它显示了驱动程序管理器相对于JDBC驱动程序和Java应用程序的位置
JDBC API
:
使用 驱动程序管理器 并 指定数据库的驱动程序 来提供 与异构数据库的 透明连接。
JDBC驱动程序管理器
:
确保 使用 正确的驱动程序 来 访问每 个数据源。
驱动程序管理器能够 支持连接到 多个异构数据库的 多个并发驱动程序。
作用
:此架构中,Java Applet 或应用直接访问数据源。
条件
:要求 Driver 能与访问的数据库交互。
机制
:用户命令传给数据库或其他数据源,随之结果被返回。
部署
:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)
2.2 JDBC三层架构
三层架构特殊之处在于,引入中间层服务。
详细参考
:JDBC三层架构详解
流程
:命令和结构都会经过该层。
吸引
:可以增加企业数据的访问控制,以及多种类型的更新;
另外,也可简化应用的部署,并在多数情况下有性能优势。
2.3 JDBC架构趋势
历史趋势
:
以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。
2.4 常见的JDBC组件
JDBC API 提供一下接口和类:
接口/类 | 类说明 |
---|---|
DriverManager | 此类管理数据库驱动程序列表。 使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序进行匹配。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。 |
Driver | 此接口处理与数据库服务器的通信。我们很少会直接与Driver对象 进行交互。 但会使用DriverManager对象 来管理这种类型的对象。 它还提取与使用Driver对象 相关的信息。 |
Connection | 此接口具有用于联系数据库的所有方法。 连接(Connection)对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。 |
Statement | 使用从此接口创建的对象将SQL语句提交到数据库。 除了执行存储过程之外,一些派生接口还接受参数。 |
ResultSet | 在使用Statement对象 执行SQL查询后,这些对象保存从数据库检索的数据。 它作为一个迭代器并可移动ResultSet对象 查询的数据。 |
SQLException | 此类处理数据库应用程序中发生的任何错误。 |
3.
4.
5. JDBC应用程序
5.1 创建JDBC应用程序Demo
构建JDBC应用程序涉及以下六个步骤 -
- 导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用
import java.sql.*
就足够了。 - 注册JDBC驱动程序:需要初始化驱动程序,以便可以打开与数据库的通信通道。
- 打开一个连接:需要使用
DriverManager.getConnection()
方法创建一个Connection
对象,它表示与数据库的物理连接。 - 执行查询:需要使用类型为
Statement
的对象来构建和提交SQL语句到数据库。 - 从结果集中提取数据:需要使用相应的
ResultSet.getXXX()
方法从结果集中检索数据。 - 清理环境:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
示例代码:
//STEP 1. Import required packages
import java.sql.*;
public class FirstExample {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "123456";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
System.out.println("There are so thing wrong!");
}//end main
}//end FirstExample
代码执行方式:
把上面代码存放到 F:\worksp\jdbc\FirstExample.java 文件中,并创建一个目录:F:\worksp\jdbc\libs,下载 mysql-connector-java-5.1.40-bin.jar 放入到F:\worksp\jdbc\libs 目录中。
下载地址:http://downloads.mysql.com/archives/c-j/
使用命令行编译Java程序并加载指定目录中的Jar包(mysql-connector-java-5.1.40-bin.jar):
F:\worksp\jdbc> javac -Djava.ext.dirs=./libs FirstExample.java
##-- 或者
F:\worksp\jdbc> javac -Djava.ext.dirs=F:\worksp\jdbc\libs FirstExample.java
5.2 JDBC数据库连接
见JDBC系列文章之JDBC数据库连接