1.JDBC
JDBC:全称Java DataBase Connection(Java 数据库连接)。在前面我们已经学习过Java和DataBase(数据库)了,JDBC就是使用Java语言操作关系型数据的一套API。本质上就是一个接口,用于给不同的数据库管理系统:比如我们最熟悉的MySQL,还有Oracle、DB2等去实现的,JDBC和 数据库管理系统 就是接口和实现类的关系。
1.1 JDBC 简介
1.2 了解JDBC
前面我们已经知道JDBC是一套Java语言提供的API,那么我们该如何结合Java去使用呢?如下:
完整的操作流程如下:
接下来我们就来详细的讲解一下这个流程:
1.3 JDBC API详解
1.3.1 DriverManager
DriverManager(驱动管理类)主要有两个作用:
1.注册驱动:
2.获取数据库连接
1.3.2 Connection
1.获取执行SQL的对象
2.管理事务
1.3.3 Statement
1.3.4 ResultSet
补充:SQL注入
1.3.5 PreparedStatement
1.作用
2.原理
2.数据库连接池
2.1 数据库连接池简介
2.2 数据库连接池实现
我们接下来讲一下最常用的数据库连接池之一: Druid
2.3 Druid 使用步骤
3.练习(结合JDBC和数据连接池)
我们先来看一下需求:
我们先来用mysql语言创建一张sql表
-- 删除tb_brand表
DROP TABLE
IF
EXISTS tb_brand;
-- 创建tb_brand表
CREATE TABLE tb_brand (
-- id 主键
id INT PRIMARY KEY auto_increment,
-- 品牌名称
brand_name VARCHAR ( 20 ),
-- 企业名称
company_name VARCHAR ( 20 ),
-- 排序字段
ordered INT,
-- 描述信息
description VARCHAR ( 100 ),
-- 状态:0:禁用 1:启用
STATUS INT
);
-- 添加数据
INSERT INTO tb_brand ( brand_name, company_name, ordered, description, STATUS )
VALUES
( '三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0 ),
( '华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1 ),
( '小米', '小米科技有限公司', 50, 'are you ok', 1 );
SELECT
*
FROM
tb_brand;
查询整张表:
对这样一张表进行增删改查的练习:
代码如下:
3.1 查询所有
/**
* 查询所有
* 1.SQl: select * from tb_brand;
* 2.参数,不需要
* 3.结果 List<Brand>
*/
@Test
public void testSelectAll() throws Exception {
//3.加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("./src/druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5.数据库连接
Connection conn = dataSource.getConnection();
/*2.定义SQL*/
String sql = "select * from tb_brand";
/*3.获取PreparedStatement对象*/
PreparedStatement pstmt = conn.prepareStatement(sql);
/*4.设置参数*/
/*5.执行sql*/
ResultSet rs = pstmt.executeQuery();
/*6.处理结果*/
Brand brand=null;
List<Brand> brands=new ArrayList<>();
while (rs.next()) {
//获取数据
int id = rs.getInt("id");
String brandName = rs.getString("brand_name");
String companyName = rs.getString("company_name");
int ordered = rs.getInt("ordered");
String description = rs.getString("description");
int status = rs.getInt("STATUS");
//封装对象
brand =new Brand(id,brandName,companyName,ordered,description,status);
//装载集合
brands.add(brand);
}
System.out.println(brands);
/*7.释放资源*/
rs.close();
pstmt.close();
conn.close();
}
3.2 添加数据
/**
* 添加:
* 1.SQl: insert into tb_brand(brand_name,company_name,ordered,description,status) values (?????)
* 2.参数,除了id之外的所有参数信息
* 3.结果 返回boolean值
*/
@Test
public void testAdd() throws Exception {
/*接收页面提交的参数*/
String brandName="香飘飘";
String companyName="香飘飘";
int ordered=1;
String description="绕地球一圈";
int status=1;
//3.加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("./src/druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5.数据库连接
Connection conn = dataSource.getConnection();
/*2.定义SQL*/
String sql = "insert into tb_brand(brand_name,company_name,ordered,description,STATUS) values (?,?,?,?,?)";
/*3.获取PreparedStatement对象*/
PreparedStatement pstmt = conn.prepareStatement(sql);
/*4.设置参数*/
pstmt.setString(1,brandName);
pstmt.setString(2,companyName);
pstmt.setInt(3,ordered);
pstmt.setString(4,description);
pstmt.setInt(5,status);
/*5.执行sql*/
int count =pstmt.executeUpdate();//受影响的行数
/*6.处理结果*/
System.out.println(count>0);
/*7.释放资源*/
pstmt.close();
conn.close();
}
3.3 修改数据
/**
* 修改:
* 1.SQL:
* update tb_brand set brand_name=?,
company_name=?,
ordered=?,
description=?,
status =?
where id=?
* 2.参数:需要所有参数
* 3.结果 返回boolean值
*/
@Test
public void testUpdate() throws Exception {
/*接收页面提交的参数*/
String brandName="香飘飘";
String companyName="香飘飘";
int ordered=10000;
String description="多绕地球几圈";
int status=1;
int id=4;
//3.加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("./src/druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5.数据库连接
Connection conn = dataSource.getConnection();
/*2.定义SQL*/
String sql = "update tb_brand set brand_name=?,\n" +
" company_name=?,\n" +
" ordered=?,\n" +
" description=?,\n" +
" status =?\n" +
" where id=?";
/*3.获取PreparedStatement对象*/
PreparedStatement pstmt = conn.prepareStatement(sql);
/*4.设置参数*/
pstmt.setString(1,brandName);
pstmt.setString(2,companyName);
pstmt.setInt(3,ordered);
pstmt.setString(4,description);
pstmt.setInt(5,status);
pstmt.setInt(6,id);/*对照id改数据*/
/*5.执行sql*/
int count =pstmt.executeUpdate();//受影响的行数
/*6.处理结果*/
System.out.println(count>0);
/*7.释放资源*/
pstmt.close();
conn.close();
}
3.4 删除数据
/**
* 删除:
* 1.SQL: delete from tb_brand where id =?
* 2.参数:只需要id
* 3.结果 返回boolean值
*/
@Test
public void testDelete() throws Exception {
/*接收页面提交的参数*/
int id=4;
//3.加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("./src/druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5.数据库连接
Connection conn = dataSource.getConnection();
/*2.定义SQL*/
String sql = "delete from tb_brand where id =?";
/*3.获取PreparedStatement对象*/
PreparedStatement pstmt = conn.prepareStatement(sql);
/*4.设置参数*/
pstmt.setInt(1,id);/*对照id删数据*/
/*5.执行sql*/
int count =pstmt.executeUpdate();//受影响的行数
/*6.处理结果*/
System.out.println(count>0);
/*7.释放资源*/
pstmt.close();
conn.close();
}
4.Maven
4.1 Maven功能了解
4.1.1 Maven标准化的项目结构
4.1.2 Maven标准化的构建流程
4.1.3 Maven的依赖管理机制
4.2 Maven简介
4.3 Maven安装配置
4.4 Maven基本使用
4.4.1 Maven常用命令
4.4.2 Maven生命周期
4.5 Maven坐标、依赖范围
1.Maven坐标
2.依赖范围