Java JDBC 入门
JDBC 可以连接关系型数据库,进行查询和修改,调用存储过程,获得数据库的元数据。
一、JDBC 的四大主要应用场景
- 查询数据
- 查询元数据
- 修改数据库
- 执行事务
二、JDBC 核心组件
- Driver
- Connection
- Statement
- PreparedStatement
- CallableStatement
- ResultSet
- Batch Update
- Transaction
- DatabaseMetaData
三、JDBC 驱动
驱动类型
- Type 1: JDBC-ODBC bridge JDBC driver
- Type 2: Java + Native code JDBC driver
- Type 3: All Java + Middleware translation JDBC driver
- 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
- executeQuery(),返回查询的结果集.
- executeUpdate(),返回受影响的记录条数(int 类型).
PreparedStatement 可以重复执行
数据库创建解析 SQL 语句并据此创建查询计划都需要花费时间。
查询计划是数据库对如何最有效地执行 SQL 进行的一种分析。
- Reuse of PreparedStatement by the JDBC driver
- 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
分页
连接池
数据库连接的建立会产生较大的系统开销,应尽量避免频繁地建立或关闭连接。