JDBC系列——2 JDBC概述

本文是 JDBC 系列文章的第二篇,本文将从 JDBC 是什么、JDBC 的用途、JDBC 主要提供的接口或类有哪些、如何使用 JDBC 等方面进行描述,希望能全面的了解 JDBC,由于本人菜鸟一枚,文中若有错误之处,还请各位朋友批评指正,感谢大家花费时间阅读。

1. JDBC是什么

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

从百度百科提供的解释中可以知道,JDBC 为我们提供了访问数据库的统一标准,开发人员无需针对不同的数据库编写不同的程序代码,只需提供一份代码,在变更数据库的时候切换对应的数据库驱动即可。

使用 JDBC 提供的 API,我们可以对数据库进行以下操作: * 建立数据库连接 * 执行数据库 SQL 语句 * 处理数据库结果

JDBC 可以使用在任何需要数据库操作的程序中,当然也可以使用它的更高层次的封装框架,如SpringHibernateMyBatis等。

2. 主要接口和类

JDBC 提供了操作数据库的统一接口,主要包括以下接口和类:

2.1 Connection

A connection (session) with a specific database. SQL statements are executed and results are returned within the context of a connection. ——java.sql.Connection

该接口是数据库通信的上下文,所有的数据库操作都是通过该上下文完成的。内部提供了创建 Statement 的方法和事务管理的相关方法。

2.2 Driver

该接口是数据库的驱动接口,数据库厂商必须保证该接口足够小,能够被一次性加载,通过该接口可以获取数据库的属性信息,也可以用于创建 Connection,但一般不这么使用。通常使用 DriverManager 来管理 Driver,DriverManager 可以同时管理多个 Driver,并根据需要

2.3 DriverManager

该类用于管理数据库驱动程序的列表。可以获取被管理的每个 Driver 的信息,也可以通过 Driver 列表中的指定 Driver 来获取数据库连接。

2.4 Statement

The object used for executing a static SQL statement and returning the results it produces. ——java.sql.Statement

该接口用于执行静态 SQL 语句,PreparedStatement 子接口用于执行动态 SQL 语句,CallableStatement 子接口用于执行存储过程或函数。

2.5 ResultSet

A table of data representing a database result set, which is usually generated by executing a statement that queries the database. ——java.sql.ResultSet

该接口用于对数据库结果集,将结果集转换成需要的对象类型。

上述这些接口或类位于java.sql包中,大家可以自行查阅,当然包中还涉及一些类型的定义以及异常等。

在 ** JDBC 4.0 **中新增了一些接口和类,被放在javax.sql包中。其中最重要的就是DataSource接口及PooledConnection接口,前者用于获取数据库连接,后者提供了数据库连接池管理需要的方法。

3. How-to-use

下面以一个 Hello World 级别的例子来介绍如何使用 JDBC 操作数据库。

  • 首先建立数据库及数据表,并在表中添加数据。
CREATE DATABASE jdbc;

use jdbc;

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `users` VALUES ('1', 'Michel'), ('2', 'Jay'),
 ('3', 'Micheal'), ('4', 'Curry');
  • 创建Java项目,并添加下列代码
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;

public class HelloWorld {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            String sql = "SELECT id, name FROM users";
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(
                  "jdbc:mysql://localhost:3306/jdbc",
                  "root",
                  "123456");
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);

            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");

                System.out.println("id = " + id + " name = " + name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

项目详见【jdbc_demo