@TOC
JDBC规范
JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库⼚商根据⾃家数据库的通信格式编写好⾃⼰数据库的驱动。所以我们只需要会调⽤ JDBC 接⼝中的⽅法即可,数据库驱动由数据库⼚商提供。
厂商有:
Oracle
MySQL
MS SQL
JDBC的好处
-
程序员如果要开发访问数据库的程序,只需要会调⽤JDBC接⼝中的⽅法即可,不⽤关注类是如何实现的。
-
使⽤同⼀套 Java 代码,进⾏少量的修改就可以访问其他 JDBC ⽀持的数据库
JDBC开发要用的包
java.sql - 所有与 JDBC 访问数据库相关的接⼝和类
javax.sql - 数据库扩展包,提供数据库额外的功能。如:连接池
数据库驱动 - 由各大厂商提供,需要额外去官网下载,是对JDBC接口实现的类
JDBC核心API
接⼝或类 | 作⽤
DriverManager 类 | 1. 管理和注册数据库驱动
2. 得到数据库连接对象
Connection 接⼝ | ⼀个连接对象,可⽤于创建 Statement 和 PreparedStatement对象
Statement 接⼝ | ⼀个 SQL 语句对象,⽤于将 SQL 语句发送给数据库服务器。
PreparedStatement 接⼝ | ⼀个 SQL 语句对象,是 Statement 的⼦接⼝
ResultSet 接⼝ | ⽤于封装数据库查询的结果集,返回给客户端 Java 程序
加载和注册驱动
Class.forName(驱动加载实现类)
public class Demo1 {
public static void main(String[] args) throws ClassNotFoundException {
//抛出类找不到的异常,注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
}
}
DriverManager类
DriverManager作用
1.管理和注册驱动
2.创建数据库的连接
类中的静态方法
Connection getConnection(String url , String username, String password)
--username,password 是数据库用户名和密码默认是 root , root
Connection getConnection (String url, Properties info)
连接数据库的URL地址格式
协议名:⼦协议://服务器名或 IP 地址:端⼝号/数据库名?参数=参数值
以mysql为例:
如:jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC
或:jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=UTC
参数可以不写,但是当有时区差报错时可以加上 serverTimezone=UTC
如果出现乱码还可以指定参数?characterEncoding=utf8来处理
Connection 接口
作用
代表了一个对象
方法
Connection 接⼝中的⽅法 Statement createStatement() – 创建⼀条 SQL 语句对象
Statement 接口
作用
代表一句sql语句对象,用于发送sql语句给服务器,用于执行静态sql语句并返回它所生成结果的对象
JDBC 访问数据库的步骤:
1.注册加载驱动
2.获取连接
3.Connection 对象获取Statement对象
4.使用Statement对象执行sql语句
5.返回结果集
6.释放资源
Statement的方法
Statement 接⼝中的⽅法 | 描述
int executeUpdate(String sql) |⽤于发送 DML 语句,增删改的操作,insert、update、delete
参数:SQL 语句
返回值:返回对数据库影响的⾏数
ResultSet executeQuery(String sql) | ⽤于发送 DQL 语句,执⾏查询的操作 select
参数:SQL 语句
返回值:查询的结果集
ResultSet 接口
作用
封装数据库查询的结果集,对结果集进⾏遍历,取出每⼀条记录
方法
boolean next() : 1. 游标向下移动一行
2.返回布尔类型,如果还有下一条记录就返回true,否则false
注意:返回的时候,结果集指向的是第一条记录的上一条记录,即null,需要运行next()方法后才会读取第一条记录
数据类型 getXXX() 通过字段名(String类型)或者列号(从1开始)返回不同类型
PreparedStatement 接口
继承Statement接口
表示预编译的sql语句对象
采用PreparedStatement接口的好处:
-
因为有预先编译的功能,提⾼ SQL 的执⾏效率。
-
可以有效的防⽌ SQL 注⼊的问题,安全性更⾼。
-
提⾼了程序的可读性。
创建的途径:
通过Connection 对象的 PreparedStatement PreparedStatement(String sql)方法创建对象
PreparedStatement PreparedStatement(String sql) :指定预编译的 SQL 语句,sql语句使用?占位符,创建一个语句对象
PreparedStatement 接口的方法:
int executeUpdate() | 执⾏ DML,增删改的操作,返回影响的⾏数。
ResultSet executeQuery() | 执⾏ DQL,查询的操作,返回结果集
设置参数? 的常用方法:
setDouble(int index, double x)
setInt(int index, int x)
setString(int index ,String str)
释放资源的顺序:
释放的先后 ResultSet,Statement,Connection
释放原则: 先开的后关,后开的先关
释放资源的操作一般放在finally语句块当中