Java JDBC 入门

228 阅读4分钟

Java JDBC 入门

JDBC 可以连接关系型数据库,进行查询和修改,调用存储过程,获得数据库的元数据。

一、JDBC 的四大主要应用场景

  1. 查询数据
  2. 查询元数据
  3. 修改数据库
  4. 执行事务

二、JDBC 核心组件

  1. Driver
  2. Connection
  3. Statement
  4. PreparedStatement
  5. CallableStatement
  6. ResultSet
  7. Batch Update
  8. Transaction
  9. DatabaseMetaData

三、JDBC 驱动

驱动类型

  1. Type 1: JDBC-ODBC bridge JDBC driver
  2. Type 2: Java + Native code JDBC driver
  3. Type 3: All Java + Middleware translation JDBC driver
  4. Type 4: All Java JDBC driver

目前基本都是第四种类型的驱动。

驱动管理器(DriverManager)

驱动注册有三种形式
Class.forName("com.mysql.jdbc.Driver");
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");

JDBC4.0(对应 JDK6 及以上)不再需要显式注册驱动,会自动搜索驱动。

重要的方法:getConnection

加载数据库驱动

Class.forName("driverClassName");

四、JDBC Connection

数据库驱动仅需在 Connection 第一次打开时加载一次,不需要每次打开连接时都加载一次。

打开数据库连接

关闭数据库连接

设置自动提交(setAutoCommit)

提交(commit)

回滚(rollback)

createStatement()

prepareStatement()

getMetaData()

五、查询数据库

六、修改数据库

七、Statement

八、ResultSet

九、PreparedStatament

创建 PreparedStatement

String sql = "select * from t_user where id = ?";
PreparedStatement preparedStatement = connection.preparedStatement(sql);

为 PreparedStatement 提供参数

preparedStatement.setLong("id", 1001);

执行 PreparedStatement

  1. executeQuery(),返回查询的结果集.
  2. executeUpdate(),返回受影响的记录条数(int 类型).

PreparedStatement 可以重复执行

数据库创建解析 SQL 语句并据此创建查询计划都需要花费时间。

查询计划是数据库对如何最有效地执行 SQL 进行的一种分析。

  1. Reuse of PreparedStatement by the JDBC driver
  2. Reuse of PreparedStatement by the database

PreparedStatement 的性能

十、Batch Updates

可以使用批处理执行插入、更新及删除操作。执行查询操作无意义。

statement.executeBatch();

返回受影响的 statement 的批处理影响行的 int[]数组

十一、Transaction 事务

支持事务的数据库一般都有自动提交,提交,回滚,保存点,事务隔离级别等几个基本属性。

在默认情况下,MySQL 每执行一条 SQL 语句,都是一个单独的事务。

commit

autocommit

rollback

保存点

有时不需要将整个事务中的所有语句全部进行回滚,一个复杂的事务可能由几个一致性的阶段组成。 保存点就是在一个事务中插入几个还原点,在出现问题时可以及时撤回到这个地方。 当撤回到还原点时,事务还在,仍在进行中,仍需要通过 commit 提交事务,在还原点后面的语句相当于不存在。

(一)开启事务

connection.setAutoCommit(false);

(二)回滚事务

connection.rollback();

(三)提交事务

connection.commit();

十二、CallableStatement

CallableStatement 用于调用存储过程。

十三、数据库元数据 MetaData

(一)获得 DatabaseMetaData 实例

DatabaseMetaData databaseMetaData = connection.getMetaData();

(二)数据库元数据

Product Name

Product Version

Database Driver Version

连接(Connection)

数据库的连接是有限的,在使用完毕后应及时关闭。

Connection 中的并不是所有的方法都和 API 描述一致,要看具体的驱动程序的支持情况。

元数据

事务相关

执行对象(Statement)

作用:执行不带参数的 SQL 语句。 特点:每次执行 SQL 语句,数据库都需要进行编译,仅执行一次查询并返回结果的情形建议使用,此时效率高于 PreparedStatement。

可以执行的方法 executeQuery executeUpdate execute Batch

PreparedStatement

继承了 Statement 作用:执行带参数或着不带参数的 SQL 语句。 特点:是预编译的,在执行包含可变参数的 SQL 语句时,效率比 Statement 高,对于多次重复执行的语句,效率会更高;安全性好,能有效防止 SQL 注入等问题。

参数索引从 1 开始

CallableStatement

继承了 PreparedStatement 作用:用于执行对数据库存储过程的调用。

结果集(ResultSet)

结果集的类型、并发性、可保存性

处理大文本及二进制数据

获得自动生成的主键

SQL 异常

SQLException

分页

连接池

数据库连接的建立会产生较大的系统开销,应尽量避免频繁地建立或关闭连接。

参考资料

  1. 写一个 ORM 框架的第一步(Apache Commons DbUtils)
  2. jdbc 就是这么简单
  3. 谈谈数据库连接池的原理