《Java 技术体系》之二:JDBC

前言

JDBC 是一套 API,用 Java 语言写成,用于在 Java 程序中访问数据库。
数据库有很多种,不同的数据库有不同的实现细节、通信协议。如果我们每次访问一种数据库, 都要手写代码访问这个数据库,费时费力,严重降低开发效率,而且极易出错。

JDBCJava 开发者提供了统一的访问数据库的接口,我们不用关心我们访问的是哪种数据库,我们只要配置数据库的地址、用户名、密码,就可以通过 JDBC 访问数据库了。

JDBC API

JDBC API 由两个 package 组成:

常用的类

  • DriverManager
  • DataSource
  • Connection
  • Statement
  • PreparedStatement
  • CallableStatement
  • ResultSet

代码示例

下面是我们手动编码访问 MySQL 数据库的流程:

  1. 获取连接
  2. 执行 SELECT 语句
  3. 获取结果集
  4. 关闭结果集、连接等资源

这种方式是最底层、最原始的。

一般情况下,应用开发框架(比如 Spring)都会屏蔽这些细节,在幕后为我们处理好 连接打开/关闭、异常、事务提交/回滚、资源释放、数据转换等问题,给我们提供了更方便、更高级的 API

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

public class Mydb1 {
    static String URL = "jdbc:mysql://localhost/mydb";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            conn = DriverManager.getConnection(URL, "root", "root");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT * FROM MyTable");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }

            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }
        }
    }
}

版本

JDK 8 使用 JDBC 4.2

JDBC drivers

类型

  • Type 1:先在客户端访问 ODBC driver,然后访问数据库
  • Type 2:先在客户端访问数据库厂商的本地库,然后访问数据库
  • Type 3:完全用 Java 编写,先访问一个服务端中间件,然后访问数据库
  • Type 4:完全用 Java 编写,使用数据库本地协议直接访问数据库(下文讨论的 MySQL Connector/J 属于这类 )

厂商

Oracle 提供了一个列表,展示哪些厂商提供了 JDBC drivers

在这里插入图片描述

下文我们重点研究常用的 MySQL

MySQL

MySQL 提供了 MySQL Connector/J 8.0 作为 JDBC driver

Maven 引入依赖

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

看下 pom.xml

<?xml version="1.0" encoding="UTF-8" ?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.30</version>
  <packaging>jar</packaging>

  <name>MySQL Connector/J</name>
  <description>JDBC Type 4 driver for MySQL</description>

  <licenses>
    <license>
      <name>The GNU General Public License, v2 with FOSS exception</name>
      <distribution>repo</distribution>
      <comments>For detailed license information see the LICENSE file in this distribution.</comments>
    </license>
  </licenses>

  <url>http://dev.mysql.com/doc/connector-j/en/</url>

  <scm>
    <connection>scm:git:git@github.com:mysql/mysql-connector-j.git</connection>
    <url>https://github.com/mysql/mysql-connector-j</url>
  </scm>

  <organization>
    <name>Oracle Corporation</name>
    <url>http://www.oracle.com</url>
  </organization>

  <dependencies>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>3.19.4</version>
    </dependency>

    <dependency>
      <groupId>com.oracle.oci.sdk</groupId>
      <artifactId>oci-java-sdk-common</artifactId>
      <version>2.14.1</version>
      <optional>true</optional>
    </dependency>
  </dependencies>
</project>

我们可以看到这个 JDBC driver叫做 MySQL Connector/J,类型是 Type 4

<name>MySQL Connector/J</name>
<description>JDBC Type 4 driver for MySQL</description>

Spring 配置数据源

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://host:3306/xxx
    username: xxxxxx
    password: xxxxxx

注:com.mysql.cj.jdbc.Driver 取代了 com.mysql.jdbc.Driver

MySQL Connector/J 8.0

官网:https://dev.mysql.com/doc/connector-j/8.0/en/

重点可以看下这几节:

在这里插入图片描述

简单总结下,MySQL Connector/J 8.0 支持:

  • Connection Pooling - 连接池化
  • Load Balance - 负载均衡
  • Failover - 故障切换

参考资料

  1. https://en.wikipedia.org/wiki/Java_Database_Connectivity
  2. https://dev.mysql.com/doc/connector-j/8.0/en/

本文完。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plattoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值