jdbc是学习web框架的前言技术,使用java来操作关系性数据库的首选方案,虽然该技术已近被框架封装,但是为了看懂框架的源码,这个是必备的,也是JavaEE13大技术之一,值得好好学一下的。
目录
一、概述
1.什么是JDBC?
-
JDBC是官方定义好的用Java来操作所有关系型数据库
的API(接口),是一套统一的标准, -
JDBC是Java DataBase Connectivity的缩写,java数据库连接
2.为什么会有JDBC?
首先市面上的关系型数据非常多,而且不同的RDBMS的实现方式是不同的,也就意味着要先操作哪个数据库,就要争对该数据库单独写一套代码,这大大增加了开发的难度,为了解决这个问题,java的爸爸就提出了JDBC,但这仅仅直接扣,java这么强大,在提出JDBC之后,数据库厂商也随即开发了争对自己数据库的实现类供开发人员使用。
- 同一套Java代码,可以操作不同的关系型数据库
3.怎么使用JDBC呢?
-
导入jar包(驱动)
{说明:用什么数据库就下载、导入相应jar包,jar包由数据库
厂商提供,实现了jdbc相应的接口 } -
注册驱动
{ 把类声明到程序中 } -
获取连接
{ JDBC的本质是通过java代码把sql发送给数据库,
所以要让java程序与数据库相连接 } -
定义sql语句
-
创建执行sql语句的对象
{ Java万物皆对象,想要使用它的方法,必须先创建对象 } -
执行sql
-
处理返回的结果
-
释放资源
代码演示
//1.注册驱动 加载类到到程序中
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接 获取与数据库的连接
//如果连接的是本地的mysql,并且默认端口号为3306,可以省略ip地址和端口号
String url = "jdbc:mysql:///itcast";
String user = "root";
String psw = "1234";
Connection conn = DriverManager.getConnection(url, user, psw);
//3.定义sql语句
String sql = "update u set money = 2000 where id = 1";
//4.获取执行sql语句的对象
Statement stat = conn.createStatement();
//5.执行sql,返回处理的结果,结果表示处理的行数
int result = stat.executeUpdate(sql);
//6.处理结果
System.out.println(result);
//7.释放资源
stat.close();
conn.close();
二、JDBC API
1.DriverManager
- 注册驱动
Class.forName底层调用的就是DriverManager中的方法
注意
MySQL5之后可以省略注册驱动包的步骤,会自动注册驱动 - 获取连接
Connection connection getConnection(String url,Stirng username,
String password);
- 参数一url:连接路径
- 语法:
jdbc:mysql://ip地址:端口号/数据库名字?
参数键值对1&参数键值对2
示例:jdbc:mysql://127.0.0.1:3306/db1
- 细节:
如果连接的是本地mysql服务器,并且默认端口号为3306,
可以省略ip地址和端口号不写
即jdbc:mysql:///db1
配置useSSL = false参数,可以解决警告提示(禁用安全连接方式)
- 参数二username:MySQL注册的用户名
- 参数三password:密码
2.Coonnection
- 获取执行sql的对象
- 普通执行sql的对象
Statement createStatement();
- 预编译执行sql的对象,解决sql注入
PreparedStatement prepareStatement(sql);
- 执行存储过程的对象
CallableStatement prepareCall(sql) - 事务管理
1. MySQL事务管理
- 开启事务:BEGIN;/START TRANSCATION;
- 提交事务:COMMIT;
- 回滚事务:ROOLLBACK;
- MySQL默认是自动提交事务的
2. JDBC事务管理
- 依靠Connection类中的方法
- 开启事务:startAutoCommit(boolean autoCommit);
true为自动提交,false为手动提交
- 提交事务:commit();
- 回滚事务:rollback();
3.Statement
- 执行SQL语句
1. 执行DML、DDL语句
int executeUpdate(sql);
返回值:DML返回受影响的行数
DDL可能返回0
2. 执行DQL语句
ResultSet executeQuery(sql)
返回结果集对象
4.ResultSet
- 作用:获取结果
- 封装了DQL语句的结果
executeQuery(sql):
执行sql语句,返回ResultSet对象 - 查询结果
boolean next()
向下移动指针,并判断当前位置是否有元素
指针默认执行当前元素的上一个元素
getXxx(参数) - 获取数据
参数:int 列的编号/String列的名称
5.PreparedStatement
- 作用:预编译执行sql,并防止sql注入
- sql注入
通过输入语句来修改定义好的sql语句,
使之条件改变,从而侵入、攻击服务器
产生的原因:sql语句的参数是通过拼接字符串实现的,
条件可以拼接一个恒等式 ,使得查询条件恒成立 - 实现方式
1. 获取对象
sql语句中的参数值使用通配符?替代,后面再进行赋值,
进而规避了sql注入的问题
此时的sql就相当于一套模板
String sql = “SELECT * FROM emp WHERE id = ?”;
PreparedStatement prepareStatement =
conn.prepareStatement(sql);
2. 设置参数
Xxx是数据类型,因为多个参数位置可能对应同一种
数据类型,所以要标明?的位置
setXxx(参数1,参数2)
参数1:?的位置编号,从1开始
参数2:?的值,要赋值的参数值
3. 执行sql
此时不需要传递sql语句了
executeUpdate();/executeQuery();
三、数据库连接池
1.概述
- 数据库连接池就是一个封装了很多连接对象的容器
- 负责分配、管理数据库连接
2.实现
- 方式:通过接口DataSource实现
- DataSource是Java官方提供的数据库连接标准接口
,由数据库连接池厂商实现,并提供API - 获取连接:getConnection();
4.使用
- 常见的数据库连接池
1. DBCP
2. C3P0
3. Druid - Driud(德鲁伊)的简介
- 由阿里巴巴提供的开源的数据库连接项目
功能强大、性能优美 - 使用
1. 导入jar包
2. 定义配置文件properties
2. 加载配置文件
3. 获取数据库连接池对象
4. 获取连接
代码示例
//1.导入jar包
//2.定义配置文件
Properties properties = new Properties();
//3.加载配置文件
properties.load(new FileInputStream("src\\druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//5.获取连接
Connection connection = dataSource.getConnection();
System.out.println(connection);