v2-7002237ad2459c3f5be98823cef4f72c_r.jpg

v2-107a81499fdacd9457f0ccdd986d466e_r.jpg

概念

Java DataBase Connectivity,Java 语言操作数据库。Sun 公司定义了操作所有关系型数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动 jar 包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类

例如,我们在 Java 代码中如果要访问 MySQL,那么必须编写代码操作 JDBC 接口。注意到 JDBC 接口是 Java 标准库自带的,所以可以直接编译。而具体的 JDBC 驱动是由数据库厂商提供的,例如,MySQL 的 JDBC 驱动由 Oracle 提供。因此,访问某个具体的数据库,我们只需要引入该厂商提供的 JDBC 驱动,就可以通过 JDBC 接口来访问,这样保证了 Java 程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的 JDBC 驱动:

┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐

│  ┌───────────────┐  │
   │   Java App    │
│  └───────────────┘  │
           │
│          ▼          │
   ┌───────────────┐
│  │JDBC Interface │◀─┼─── JDK
   └───────────────┘
│          │          │
           ▼
│  ┌───────────────┐  │
   │  JDBC Driver  │◀───── Vendor
│  └───────────────┘  │
           │
└ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ┘
           ▼
   ┌───────────────┐
   │   Database    │
   └───────────────┘

快速入门

  1. 导入驱动 jar 包

    1. 复制 mysql-connector-java-5.1.37-bin.jar 到项目的libs目录下
    2. 右键 → Add As Library

    <aside> 💡 或者,可以使用 Maven 导入驱动:

    因为我们选择了MySQL 5.x作为数据库,所以我们首先得找一个MySQL的JDBC驱动。所谓JDBC驱动,其实就是一个第三方jar包,我们直接添加一个Maven依赖就可以了:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
        <scope>runtime</scope>
    </dependency>
    
    

    **注意到这里添加依赖的scoperuntime,因为编译Java程序并不需要MySQL的这个jar包,只有在运行期才需要使用。**如果把runtime改成compile,虽然也能正常编译,但是在IDE里写程序的时候,会多出来一大堆类似com.mysql.jdbc.Connection这样的类,非常容易与Java标准库的JDBC接口混淆,所以坚决不要设置为compile

    我们在使用 JDBC 的时候,只需要面相接口编程,而非面向实现。这样的话能够降低耦合。

    </aside>

  2. 注册驱动

    Class.forName("com.mysql.jdbc.Driver")
    
  3. 获取数据库连接对象 Connection

    Connection conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
    
  4. 定义 SQL 语句

    String sql = "update account set balance = 2000";
    
  5. 获取执行 SQL 语句的对象 Statement

    Statement stmt = conn.createStatement();
    
  6. 执行 SQL,接收返回的结果

    int count = stmt.executeUpdate(sql);
    
  7. 处理结果

    System.out.println(count);
    
  8. 释放资源

    stmt.close();
    conn.close();
    

详解各个对象