Java - JDBC 操作流程


前言

JDBC 作为一种规范, 提供接口由供应商(如: MySQL)去实现底层驱动, 开发人员只需实现自己的业务代码.

操作

MySQL 版本

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 8.0.23-0ubuntu0.20.04.1 |
+-------------------------+
1 row in set (0.00 sec)

Maven 依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>

代码实现

InputStream resourceAsStream = Thread.currentThread()
		.getContextClassLoader()
		.getResourceAsStream("jdbc.properties");
Properties p = new Properties();
p.load(resourceAsStream);

// 1. 加载 MySQL 驱动并注册
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取连接
Connection connection = DriverManager.getConnection(URL, p);

// 3. 创建 Statement
Statement statement = connection.createStatement();
// 4. 执行语句
// /* ping */
ResultSet resultSet = statement.executeQuery("select 1");

// 处理结果
while (resultSet.next()) {
    String database = resultSet.getString("1");
    System.out.println(database);
}

下面讲解驱动大概为我们做了什么

1. 加载 MySQL 驱动并注册

  1. Class::forName 去加载名为 com.mysql.cj.jdbc.Driver 的类
  2. 如果该类是第一次加载则会执行 static 代码块
// static 代码块
static {
    try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException("Can't register driver!");
    }
}
Driver DriverManager registerDriver:DriverInfo 1 Driver DriverManager

2. 获取连接

  1. DriverManager 根据 url 和属性循环遍历驱动尝试连接, 如果成功则返回 Connection
DriverManager DriverInfo NonRegisteringDriver ConnectionUrl ConnectionImpl Connection getConnection ensureDriversInitialized 1 CopyOnWriteArrayList<DriverInfo> 2 driver 3 url, info 4 this.session = new NativeSession(hostInfo, this.propertySet) 5 conStr.getMainHost() 6 getInstance(HostInfo hostInfo) 7 .getConnection(URL, p) 8 DriverManager DriverInfo NonRegisteringDriver ConnectionUrl ConnectionImpl Connection

3. 创建 Statement

  1. 若无参数使用默认参数创建 Statement
Connection StatementImpl Statement createStatement() createStatement(int resultSetType, int resultSetConcurrency) 1 new 2 setResultSetType(resultSetType) 3 setResultSetConcurrency(resultSetConcurrency) 4 return 5 createStatement() 6 Connection StatementImpl Statement

4. 执行语句

  1. 重置取消状态
  2. 关闭所有打开的 Results
  3. 获取 session
  4. 执行语句
  5. 发送语句
  6. 读取结果
  7. 返回 result
Statement NativeSession ResultSetInternalMethods NativeProtocol ResultSet executeQuery("select 1") resetCancelledState() 1 implicitlyCloseAllOpenResults() 2 this.connection.getSession() 3 execSQL 4 execSQL this.protocol 5 sendCommand 6 readAllResults 7 sendQueryPacket 8 return this.results 9 executeQuery("select 1") 10 Statement NativeSession ResultSetInternalMethods NativeProtocol ResultSet

资源

jdbc4.0 book

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: flink-connector-jdbc_2.12 是 Apache Flink 的一个连接器,用于将 Flink 与关系型数据库进行连接和交互。_2.12 表示这个连接器是为 Scala 2.12 版本编译的。以下是关于这个连接器的一些详细说明: 1. 功能:flink-connector-jdbc_2.12 提供了将 Flink 作业与关系型数据库集成的功能。它可以读取和写入关系型数据库中的数据,并提供对数据流的持久化和查询执行能力。 2. 数据源:这个连接器可以作为 Flink 作业的数据源,从关系型数据库中读取数据。它支持读取整个表、查询结果集或自定义的 SQL 查询。读取的数据可以作为 Flink 的 DataStream 进行处理和转换。 3. 数据接收器:此连接器也可以作为 Flink 作业的数据接收器,将流数据写入关系数据库,例如将计算结果持久化到数据库中。它支持插入、更新和删除操作,可以根据业务逻辑将流数据写入到相应的数据库表中。 4. 数据格式:flink-connector-jdbc_2.12 支持多种数据格式的读写,如 Avro、JSON、ORC、Parquet 等。它提供了对这些数据格式的解析和序列化功能,并将其映射到关系型数据库中的表结构。 5. 事务支持:此连接器还具备事务支持的能力,可以在作业执行期间确保数据的一致性和可靠性。它能够处理作业失败、重启等情况,并保证数据的完整性。 6. 配置灵活:flink-connector-jdbc_2.12 提供了丰富的配置选项,可以根据不同的数据库类型和连接要求进行灵活的配置。可以设置连接URL、用户名、密码、最大连接数等参数。 总之,flink-connector-jdbc_2.12 是一个用于 Apache Flink 的关系型数据库连接器,它提供了将 Flink 与关系型数据库集成的功能,可以实现数据的读写和持久化。使用该连接器,我们可以方便地处理和分析关系型数据库中的数据,并能够根据业务需求进行定制配置和操作。 ### 回答2: flink-connector-jdbc_2.12是Apache Flink的一个连接器(connector),旨在连接Flink与关系型数据库。它是为了通过Flink将数据从关系型数据库读取到流式数据流中,或将流式数据写入到关系型数据库中而开发的。 该连接器支持与各种关系型数据库的连接,如MySQL、PostgreSQL、Oracle等,并提供了读取和写入数据库的功能。通过使用JDBCJava Database Connectivity)接口,flink-connector-jdbc_2.12可以与各种数据库进行通信并执行SQL查询和操作。 使用该连接器,用户可以从关系型数据库中实时读取数据,并将其转换为Flink数据流进行处理。同时,也可以将流式数据写入到关系型数据库中,用于持久化存储或与其他系统交互。这使得Flink可以无缝地与现有的关系型数据库集成,为用户提供更多的数据处理和分析功能。 通过flink-connector-jdbc_2.12,用户可以配置数据源和数据接收器,指定连接数据库的信息、数据表、查询条件等,并对数据进行转换、过滤、聚合等操作。它提供了高度可靠和可扩展的数据处理能力,使得用户可以轻松地实现复杂的数据处理和分析任务。 总而言之,flink-connector-jdbc_2.12是Apache Flink提供的一个连接器,用于连接Flink与关系型数据库,支持数据的读取和写入操作,使得Flink可以与关系型数据库无缝集成,为用户提供更多的数据处理和分析功能。 ### 回答3: flink-connector-jdbc_2.12是Apache Flink的一个官方支持的JDBC连接器,用于将Flink与关系型数据库进行连接和交互。在Flink中使用该连接器,可以方便地读取和写入关系型数据库中的数据。 flink-connector-jdbc_2.12提供了丰富的功能和特性。首先,它支持从关系型数据库读取数据,并将其作为DataStream或Table进行处理和操作。这使得我们可以利用Flink的流式处理和批量处理功能来处理数据库中的数据。其次,它也支持将DataStream或Table中的数据写入到关系型数据库中,实现数据的持久化和存储。这对于需要将计算结果保存到数据库中的场景非常有用。 此外,flink-connector-jdbc_2.12还提供了一些高级功能,例如事务支持和Exactly-Once语义。通过使用JDBC连接器,我们可以在Flink中实现端到端的Exactly-Once一致性保证,确保数据在读取和写入过程中的一致性和可靠性。 flink-connector-jdbc_2.12支持多种数据库系统,如MySQL、PostgreSQL、Oracle等。并且它还提供了一些配置选项,如连接池配置、批量写入配置等,可以根据具体需求进行调整和优化。 总而言之,flink-connector-jdbc_2.12是一个非常有用和强大的工具,可以帮助我们在Flink中与关系型数据库进行无缝连接和数据交互。它不仅提供了读写数据的功能,还支持事务和Exactly-Once语义,使得我们可以在Flink中构建高效和可靠的数据处理流程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值