一、概述

官方解释:

  JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的 Java API,可以为多种关系型数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

理解:

  JDBC就是一套访问数据库的规范(或者说是一组接口),提供数据库的协议标准,各个数据库厂商根据这套规范提供一套访问自己数据库的驱动。

二、JDBC工作原理

Java学习之==>JDBC

从图中可以看到 JDBC 的几个重要组成要素。最顶层是我们自己编写的Java应用程序(Java Application),Java 应用程序可以使用集成在JDK中的 java.sql 和 javax.sql 包中的JDBC API来连接和操作数据库。下面我们依次介绍JDBC的组成要素:

1、JDBC API

  JDBC API 由Sun公司提供,提供了Java 应用程序与各种不同数据库交互的标准接口,如:Connection(连接)接口,Statement 接口,ResultSet(结果集)接口,PreparedStatement 接口等。开发者使用这些JDBC接口进行各种数据库操作。

  • DriverManager:此类管理数据库驱动程序列表。使用通信子协议将来自 Java 应用程序的连接请求与适当的数据库驱动程序匹配;
  • Driver:此接口处理与数据库服务器的通信,我们很少会直接与Driver对象进行交互。而是使用DriverManager对象来管理这种类型的对象;
  • Connection:该接口具有用于联系数据库的所有方法。连接对象通信上下文,即,与数据库的所有通信仅通过连接对象;
  • Statement:使用从此接口创建的对象将SQL语句提交到数据库。除了执行存储过程之外,一些派生接口还接受参数;
  • ResultSet: 在使用 Statement 对象执行 SQL查询后,这些对象保存从数据库检索的数据。它作为一个迭代器,允许我们移动其数据;
  • PreparedStatement:继承自 Statement 接口,主要用于执行预编译 SQL,除了具有 Statement 接口的所有功能,还另外它还添加了一整套方法,用于设置发送给数据库以取代 IN 参数占位符的值;

2、JDBC Driver Manager

  JDBC Driver Manager(驱动程序管理器)由Sun公司提供,它是 JDBC 体系结构的支柱,负责管理各种不同的 JDBC 驱动,把 Java 应用程序连接到相应的 JDBC 驱动程序上,位于JDK的 java.sql 包中。

3、JDBC Driver

  JDBC Driver 由各个数据库厂商或第三方中间件厂商提供,负责连接各种不同的数据库。例如,上图中,访问 MySQL 和 Oracle 时需要不同的JDBC驱动,这些 JDBC 驱动都实现了JDBC API 中定义的各种接口。在开发Java应用程序时,我们只需正确加载JDBC驱动,正确调用 JDBC API,就可以进行数据库访问了。

三、JDBC 访问数据库的步骤

我们先来看一下下面这段代码:

public class App {
  private static final String URL = "jdbc:mysql://192.168.182.131:3306/cakes";
  private static final String USER_NAME = "root";
  private static final String PASSWD = "123456";

  public static void main(String[] args) throws Exception {

    // 1.加载驱动
    Class.forName("com.mysql.jdbc.Driver");

    // 2.建立连接
    Connection connection = DriverManager.getConnection(URL, USER_NAME, PASSWD);

    // 3.建立Statement
    Statement statement = connection.createStatement();

    // 4.执行sql
    boolean execResult = statement.execute("insert into user(`name`,`passwd`) values('木木','123456')");
    // statement.executeUpdate返回的是影响的行数
    int effectRows = statement.executeUpdate("insert into user(`name`,`passwd`) values('大叔','888888')");

    System.out.println("execResult = " + execResult);
    System.out.println("effectRows:" + effectRows);

    // 5.资源关闭
    statement.close();
    connection.close();
  }
}
JDBC 示例

相关文章: