2 java.sql 包简介

Wu Jun 2018-12-18 21:53:13
05 Java > 00 Java 基础 > 12 JDBC

1 常用接口与类

常用接口与类主要有 DriverManager、Connection、Statement 和 ResultSet。

1.1 DriverManager

注册数据库驱动,创建数据库连接。Driver 由数据库厂家提供。

1)注册驱动
DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");

Class.forName() 要求 JVM 查找并加载指定的类,会执行该类的静态代码段。JDBC 规范要求数据库厂家的 Driver 实现都必须向 DriverManager 注册自己。如 com.mysql.jdbc.Driver 类中,有以下静态块:

  static {
    try {
      java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
      throw new RuntimeException("Can't register driver!");
    }
  }
2)连接数据库
Connection conn = DriverManager.getConnection(url, user, password) ;

1.2 Connection

所有与数据库交互都是基于连接对象的,在连接上下文中执行 sql 语句并返回结果。

1)创建 statement 对象
2)事务处理
3)其他

1.3 Statement

用于执行静态 SQL 语句并返回它所生成结果的对象。

1)三种 Statement 类
2)执行 sql
3)批处理

1.4 ResultSet

查询数据结果集,可以作为迭代器通过移动获取数据。维护了一个游标,默认游指向结果集第一行之前。不可修改,Connection 关闭后,就不再可用。

1)检索不同类型字段的方法
2)对结果集进行滚动的方法
3)判断

使用后依次关闭对象及连接:ResultSet → Statement → Connection

2 java.sql 操作数据库完整步骤示例

void jdbcTemple() {

    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;

    try {
        //1.注册驱动
        Class.forName(driverClass);
        //2.建立连接
        connection = DriverManager.getConnection(url, user, password);
        //3.创建Statement
        statement = connection.createStatement();
        //4.执行sql语句
        resultSet = statement.executeQuery("SELECT * FROM users");
        //5.处理结果
        while (resultSet.next()) {
            resultSet.getString(columnIndex);
            resultSet.getString(columnLabel);
        }
    } catch (SQLException | ClassNotFoundException e) {
        e.printStackTrace();
    } finally {
        //6.关闭连接
        try {
            if (resultSet != null) {
                resultSet.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (connection != null) {
                        connection.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}