定义
JDBC的全称为Java Database Connectivity,即Java数据库连接,是一种跨平台运行
的可执行SQL的Java API。程序可通过JDBC API连接到关系数据库
.
架构
JDBC API支持用于数据库访问的两层和三层处理模型,但通常,JDBC体系结构由两层组成:
- JDBC API:提供
应用程序
到JDBC管理器
连接,使用驱动程序管理器并指定数据库的驱动程序来提供与异构数据库的透明连接。 - JDBC驱动程序API:支持
JDBC管理器
到驱动程序
连接,管理器确保使用正确的驱动程序来访问每个数据源。
常用组件
JDBC API提供以下接口和类
- Driver:
管理数据库驱动
。我们很少会直接与Driver对象进行交互。 但会使用DriverManager对象来管理这种类型的对象。 它还提取与使用Driver对象相关的信息。 - DriverManager: 此类管理数据库驱动程序列表。 使用通信子协议将来自java应用程序的连接请求与适当的
数据库驱动
程序进行匹配
。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。 - Connection:此接口具有用于
联系数据库
的所有方法。 连接(Connection)对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。 - Statement:执行SQL语句(不能使用
?
占位符参数),使用从此接口创建的对象将SQL语句提交到数据库
。 除了执行存储过程之外,一些派生接口还接受参数。 - PreparedStatement :Statement的子接口,允许数据库
预编译
SQL语句(这些SQL通常带有参数,可以带?
占位符参数),以后每次只改变命令的参数,避免每次都要编译SQL语句,因此性能更好。(提前编译,效率高,安全) - ResultSet:在使用Statement对象执行SQL查询后,这些对象
保存
从数据库检索的数据。 它作为一个迭代
器并可移动ResultSet对象查询的数据。 - SQLException:此类处理数据库应用程序中发生的任何错误。
编程步骤
- 操作数据库的步骤
1、为我们的项目 添加驱动包 .jar
2、注册 加载 驱动
3、用过 DriverManager 获取数据库连接 Connection
4、准备要执行的 sql 字符串,获取数据库的会话 Statement
5、通过 Statement 执行 sql 语句
6、操作 数据库结果集
7、关闭资源
public class ConnMySql {
public static void main(String[] args) throws Exception {
//1. 加载驱动
Class.forName("com.mysql.jdbc.Driver");
try (
// 2. 使用DriverManager获取数据库的连接conn
Connection conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/select_test",
"root", "32147");
// 3. 使用Connection创建Statement对象
Statement stmt = conn.createStatement();
// 4. 执行SQL语句
/*
Statement有三种执行SQL语句的方法:
1. execute()可执行任何SQL语句:返回boolean值,如果执行后第一个结果为ResultSet,返回true,否则返回false
2. executeQuery()执行select语句:返回查询到的结果集
3. executeUpdate()用于执行DML语句:返回整数,代表被SQL影响的记录条数
* */
ResultSet rs = stmt.executeQuery("select s.*,teacher_name"
+ "from student_table s, teacher_table t"
+ "where t.teacher_id = s.java_teacher"))
{
while (rs.next()) {
System.out.println(rs.getInt(1) + "\t"
+ rs.getString(2) + "\t"
+ rs.getString(3) + "\t"
+ rs.getString(4));
}
}
}
}
占位符
在SQL语句中代替具体值,执行SQL语句时再接收参数
?
:原生JDBC中就有,用来在PreparedStatement中代替传入参数的位置。具体而言,?在PreparedStatement中用,Statement不能用。
在PreparedStatement中,只需要传入一次包含占位符的SQL语句,以后每次通过setXxx()传入参数即可;
在Statement,每次执行SQL语句,均需要传入SQL语句。#{}
,${}
:MyBatis占位符( 详情 )
常见问题
通配符和占位符的区别
参考文献
https://www.yiibai.com/jdbc/jdbc-introduction.html JDBC常用组件
https://cloud.tencent.com/developer/article/1153770 JDBC工作流程,架构