1.1 JDBC 介绍
1.1.1「JDBC 介绍」核心问题&答案
1. JDBC本质是什么?
官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
1. JDBC好处什么?
1. 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
2. 可随时替换底层数据库,访问数据库的Java代码基本不变(方言不同,如mysql limit oracle不支持)
3. 以后编写操作数据库的代码只需要面向JDBC(接口),操作哪儿个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。如下图就是MySQL驱动包
1.2 JDBC 快速入门
1.2.1「JDBC 快速入门」核心问题&答案
1. JDBC步鄹有哪些?
//1. 注册驱动(可不写)Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接 jdbc:mysql://ip:3306/数据库名 | DriverManager驱动管理器,用来获得数据库链接
//3. 定义sql
//4. 获取执行sql的对象 PreparedStatement | 通过数据库链接获得操作sql语句对象--- PreparedStatement
//5. 执行sql 返回结果 如果是增删改操作,返回int的影响行数,如果是查询操作返回ResultSet结果集
//6. 处理结果 如果是增删改 直接打印即可,,如果是ResultSet结果集 调用next()方法
//7. 释放资源 close() 关闭操作sql的对象,释放数据库连接
1.3 JDBC 快速入门练习 ✏️
1.3.0「JDBC 快速入门练习」目的
- 熟悉 JDBC 操作流程
1.3.1「JDBC 快速入门练习」需求&效果
- 删除 id 为 1003 的数据
1.3.2「JDBC 快速入门练习」分析
@Test
public void deleteById() throws SQLException {
//1. 注册驱动
//Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接 jdbc:mysql://ip:3306/数据库名
String url="jdbc:mysql://127.0.0.1:3306/java69";
String username = "root";
String password = "数据库密码";
Connection conn = DriverManager.getConnection(url, username, password);
//3. 定义sql
String sql = "delete from empjdbc where id = 1002 ";
//4. 获取执行sql的对象 PreparedStatement
PreparedStatement pst = conn.prepareStatement(sql);
//5. 执行sql
int count = pst.executeUpdate();
//6. 处理结果
System.out.println(count);
//7. 释放资源
pst.close();
conn.close();
}
下课休息
1.4 JDBC 完成增加和修改数据练习 ✏️
因为添加和修改的操作和删除几乎一模一样,只有 sql 语句不一样,鼓励学员自行完成 时长: 15:00
1.4 .0「JDBC 完成增加和修改数据练习」目的
- 熟悉 JDBC 操作流程
1.4 .1「JDBC 完成增加和修改数据练习」需求&效果
- 修改 id 为 1004 的员工 salary 工资为 50000
- 添加一个员工
1.4 .2「JDBC 完成增加和修改数据练习」分析
/**
修改id 为 1004 的员工 salary工资为50000
Sql语句:UPDATE empjdbc SET salary =50000 WHERE id =1004
*
*/
@Test
public void update() throws SQLException {
//1. 注册驱动(可不写)
//Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接 jdbc:mysql://ip:3306/数据库名 DriverManager
String url="jdbc:mysql://127.0.0.1:3306/数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false";
String user="root";
String password="数据库密码";
Connection conn = DriverManager.getConnection(url, user, password);
//3. 定义sql
String sql ="UPDATE empjdbc SET salary =50000 WHERE id = 1004 ";
//4. 获取执行sql的对象 PreparedStatement
PreparedStatement pst = conn.prepareStatement(sql);
// 通过执行sql语句的对象 PreparedStatement
//5. 执行sql 返回结果
int i = pst.executeUpdate();
//6. 处理结果
System.out.println("影响行数:"+i);
//7. 释放资源
pst.close();
conn.close();
}
/*
需求:3添加一条数据
sql语句:INSERT empjdbc (id,ename,job_id,mgr,joindate,salary,bonus,dept_id) VALUE('1015','韩立',4,1004,'2001-12-29',15000,12,20)
*/
@Test
public void addEmp() throws Exception {
//1. 注册驱动(可不写)
//Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接 jdbc:mysql://ip:3306/数据库名 | DriverManager驱动管理器,用来获得数据库链接
String url="jdbc:mysql://127.0.0.1:3306/java70?useSSL=false";//链接地址,除了数据库的名字,其他基本是固定的
String username="root";
String password="win10139741";
Connection connection = DriverManager.getConnection(url, username, password);
//3. 定义sql
String sql ="INSERT empjdbc (id,ename,job_id,mgr,joindate,salary,bonus,dept_id) VALUE('1015','韩立',4,1004,'2001-12-29',15000,12,20)";
//4. 获取执行sql的对象 PreparedStatement | 通过数据库链接获得操作sql语句对象--- PreparedStatement
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//5. 执行sql 返回结果 如果是增删改操作,返回int的影响行数,如果是查询操作返回ResultSet结果集
int i = preparedStatement.executeUpdate();
System.out.println("影响行数:"+i);
//7. 释放资源 close() 关闭操作sql的对象,释放数据库连接,
preparedStatement.close();
connection.close();
}
1.5 JDBC 完成查询数据
1.5.1「JDBC 完成查询数据」核心问题&答案
1. JDBC执行DQL语句,执行方法是什么?
executeUpdate(); 执行DDL语句和DML语句
executeQuery(); 执行DQL语句
1. JDBC执行DQL语句,返回结果集是什么?
ResultSet(结果集对象)封装了SQL查询语句的结果
ResultSet(结果集对象):boolean next() 将光标从当前位置向前移动一行,判断当前行是否为有效行
ResultSet(结果集对象):xxx getXxx(参数):获取数据。 xxx : 数据类型;如: int getInt(参数) ;String getString(参数)
1.5.1「JDBC 完成查询数据」核心代码
// 需求4 查询id为1013的员工信息,打印在控制台上
@Test
public void selectById() throws SQLException {
//1. 注册驱动(可不写)
//Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接 jdbc:mysql://ip:3306/数据库名 DriverManager
String url="jdbc:mysql://127.0.0.1:3306/java69?useUnicode=true&characterEncoding=utf-8&useSSL=false";
String user="root";
String password="win10139741";
Connection conn = DriverManager.getConnection(url, user, password);
//3. 定义sql
String sql="select * from empjdbc where id =1013";
//4. 获取执行sql的对象 PreparedStatement
PreparedStatement pst = conn.prepareStatement(sql);
//5. 执行sql 返回结果 查询调用executeQuery
ResultSet resultSet = pst.executeQuery();
//6. 处理结果 next() true-->下面有数据
while (resultSet.next()){
// 通过结果集获取数据
int id = resultSet.getInt("id");
String ename = resultSet.getString("ename");
int job_id = resultSet.getInt("job_id");
System.out.println("id:"+id+" name:"+ename+" job_id:"+job_id);
}
//7. 释放资源
pst.close();
conn.close();
}
1.6 JDBC 完成查询数据(动态参数)
1.6.1「 JDBC 完成查询数据(动态参数)」核心问题&答案
1. PreparedStatement 如何设置动态参数?
1.sql语句中参数使用 ? 进行占位,
2.PreparedStatement对象:setXxx(参数1,参数2):给 ? 赋值。 Xxx:数据类型 ; 如 setInt (参数1,参数2)
3.参数1: ?的位置编号,从1 开始;参数2: ?的值
1.7 数据库连接池
1.7.1「数据库连接池」核心问题&答案
1. 为什么要使用数据库连接池?
1数据库连接池是个容器,负责分配、管理数据库连接(Connection)
2. 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
3. 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
1.8 数据库连接池使用
1.8.1「数据库连接池使用」核心问题&答案
1. 德鲁伊使用的步鄹?
1. 导入jar包 druid-1.1.12.jar
2. 定义配置文件
3. 加载配置文件
4. 获取数据库连接池对象
5. 获取连接
1.9 使用德鲁伊连接池完成查询代码改造 ✏️
1.9.0「JDBC 快速入门练习」目的
- 熟悉数据库连接池的使用
1.9.1「JDBC 快速入门练习」需求&效果
- 查询 id 为 1013 的员工信息,使用德鲁伊链接池,打印结果在控制台上
下课休息
2.Maven 介绍
「Maven 介绍」背景导入
项目结构我们都知道,每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。我再 eclipse 中创建的目录,无法在 idea 中进行使用,这就造成了很大的不方便,那怎么办尼?今天学习 Maven 就能解决这个问题,来吧,打起精神学习 Maven 的知识吧!!
2.1 Maven 介绍
2.1.1「Maven 介绍」核心问题&答案
1. Maven是专门用于管理和构建Java项目的工具,主要功能有啥?
1. 提供了一套标准化的项目结构
2. 提供了一套标准化的构建流程(编译,测试,打包,发布……)
3. 提供了一套依赖管理机制
2.2 Maven 简介
2.2.1「Maven 简介」核心问题&答案
1. Maven的仓库分类有哪些?
- 本地仓库:自己计算机上的一个目录
- 中央仓库:由Maven团队维护的全球唯一的仓库. 地址: https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库,放一些有版权信息的jar包 今天我们只学习远程仓库的使用,并不会搭建。
1. Maven工程的jar查找顺序?
本地仓库 --> 远程仓库--> 中央仓库
2.3 Maven 安装和配置 ✏️
2.3.1「Maven 安装和配置」核心问题&答案
1. Maven配置文件中要配置哪些信息?
1.本地仓库
2.阿里镜像
2.4 Maven 基本使用 ✏️
2.4.1「Maven 基本使用」核心问题&答案
1. Maven的常用命令?
- compile :编译
- clean:清理
- test:测试
- package:打包
- install:安装 把你打好的jar 安装到你的仓库中
2.Maven的生命周期?
Maven 对项目构建的生命周期划分为3套:
- clean :清理工作。
- default :核心工作,例如编译,测试,打包,安装等。
- site : 产生报告,发布站点等。这套声明周期一般不会使用。
同一套生命周期内,执行后边的命令,前面的所有命令会自动执行
2.5 创建 Maven 项目 ✏️
2.5.1「创建 Maven 项目」核心问题&答案
1. 创建Maven项目要填写哪些信息?
2.6 导入 Maven 工程
2.6.1「导入 Maven 工程」核心问题&答案
1. Maven-helper插件有什麽作用
1.安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:
2.7 创建 Maven 工程和熟悉指令练习 ✏️
2.7.0「创建 Maven 工程和熟悉指令练习」目的
- 熟悉 Maven 工程结构,创建流程,指令含义
2.7.1「创建 Maven 工程和熟悉指令练习」需求&效果
- 自行定义坐标
- 添加 mysql 驱动依赖
- 检查 ideamaven 是否配置成功
- 依次执行 clean compile package install 等指令
2.8 依赖管理
2.9 依赖范围
2.9.1「依赖范围」核心问题&答案
1. 依赖范围有哪些、默认的是什么?
1.通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。
compile :作用于编译环境、测试环境、运行环境。默认就是 compile 值
test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
provided :作用于编译环境、测试环境。我们后面会学习 servlet-api ,在使用它时,必须将 scope 设置为该值,不然运行时就会报错
runtime : 作用于测试环境、运行环境。jdbc驱动一般将 scope 设置为该值,当然不设置也没有任何问题
注意: 如果引入坐标不指定 scope 标签时,默认就是 compile 值。以后大部分 jar 包都是使用默认值。 provided 编译和测试有效,运行无效--->我们的项目运行在服务器中,服务器中本身就存在对应的 jar,所以不需要项目提供。
剩余时间,练习依赖导入和将上午的 JDBC 代码导入到 Maven 工程中运行,下课休息