JDBC
- JDBC 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。java 提供了jdbc的接口规范,对应数据库厂商依照规范进行驱动类库开发,提供给开发者。应用程序与数据以jdbc桥接的方式进行交互,任何基于JDBC 的 ORM 框架都是对JDBC 操作的封装
常用接口
java.sql.Driver
该接口是提供给数据库开发厂商的,主要功能是描述驱动程序,提供驱动信息,最重要的是实现数据库连接的抽象
Connection connect(String url, java.util.Properties info) throws SQLException
,如果某个数据库要实现jdbc规范必须实现该接口。开发者装载该接口通过Class.forName(String driverName)
进行,其中driverName
为全类名。java.sql.Connection
该接口是数据库jdbc 连接的抽象层,主要生成SQL并向数据库发送
- 编译语句
java.sql.Statement
- 预编译语句
java.sql.PreparedStatement
- 数据库存储过程
java.sql.CallableStatement
同时事务级别 事务的commit,事务的callback,连接的生命周期 也由 Connection 来操作。
事务的隔离级别
int TRANSACTION_NONE = 0
无事务int TRANSACTION_READ_UNCOMMITTED = 1
读取未提交int TRANSACTION_READ_COMMITTED = 2
读取已提交int TRANSACTION_REPEATABLE_READ = 4
可重复读取int TRANSACTION_SERIALIZABLE = 8
可序列化
- 编译语句
java.sql.Statement
用于执行静态SQL语句并返回它所生成结果的对象。
类图:
Statement:由createStatement创建,用于发送简单的SQL语句(不带参数) 。
statement 没有
set<Type>
之类的方法,所以sql必须作为一个整体传入。例如//获取statement Statement statement = jdbcMysqlConnection.statement(); // sql 必须作为整体进行操作 ResultSet resultSet = statement.executeQuery("select * from sys_user"); while (resultSet.next()) { System.out.println(resultSet.getString(1)); }
PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement,大数据量比较消耗资源。例如
//可传入 字段占位符 ? PreparedStatement preparedStatement = jdbcMysqlConnection.preparedStatement("select * from sys_role where state =?"); // 对占位符进行赋值操作 从1 开始 一旦使用占位符 必须对占位符进行赋值 才能 进行 execute系列操作 preparedStatement.setString(1,"1"); ResultSet resultSet = preparedStatement.executeQuery();
CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程
java.sql.ResultSet
主要用来获取sql执行后返回的结果集
resultSet
、statement
、connection
操作完毕后需要关闭 遵循从下游到上游的方向依次关闭