javaweb与数据库
0x00 简介
来源于在黑马程序员发布在哔站上javaweb教学内容
学到的一些javaweb与数据库相关的知识,记录一下。
0x01 SQL分类
DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等
DDL简单理解就是用来操作数据库,表等
DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
DML简单理解就对表中数据进行增删改
DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。
DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
DML简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。
0x02 JDBC概念
JDBC 就是使用Java语言操作关系型数据库的一套API
全称:( Java DataBase Connectivity ) Java 数据库连接
0x03 JDBC快速入门
先来看看通过Java操作数据库的流程
第一步:编写Java代码
第二步:Java代码将SQL发送到MySQL服务端
第三步:MySQL服务端接收到SQL语句并执行该SQL语句
第四步:将SQL语句执行的结果返回给Java代码
0x04 编写代码步骤
- 创建工程,导入驱动jar包
- 注册驱动
Class.forName("com.mysql.jdbc.Driver");
- 获取连接
Connection conn =DriverManager.getConnection(url, username,password);
Java代码需要发送SQL给MySQL服务端,就需要先建立连接
- 定义SQL语句
String sql = “update…” ;
- 获取执行SQL对象
执行SQL语句需要SQL执行对象,而这个执行对象就是
Statement对象
Statement stmt = conn.createStatement();
- 执行SQL
stmt.executeUpdate(sql);
- 处理返回结果
- 释放资源
0x05 JDBC API详解
5.1 DriverManager
DriverManager(驱动管理类)作用:
- 注册驱动
registerDriver方法是用于注册驱动的,但是我们之前做的入门
案例并不是这样写的。而是如下实现
Class.forName("com.mysql.jdbc.Driver");
- 获取数据库连接
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
url = "jdbc:mysql://127.0.0.1:3306//db1" user :用户名 poassword :密码
5.2 Connection
Connection(数据库连接对象)作用:
5.2.1 获取执行对象
- 普通执行SQL对象
Statement createStatement()
入门案例中就是通过该方法获取的执行对象。
- 预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
通过这种方式获取的 PreparedStatement SQL语句执行对象是
我们一会重点要进行讲解的,它可以防止SQL注入。
- 执行存储过程的对象
CallableStatement prepareCall(sql)
通过这种方式获取的 CallableStatement 执行对象是用来执行
存储过程的,而存储过程在MySQL中不常用,所以这个我们将
不进行讲解。
5.2.2 事务管理
MySQL事务管理的操作:
- 开启事务 : BEGIN; 或者 START TRANSACTION;
- 提交事务 : COMMIT;
- 回滚事务 : ROLLBACK;
5.3 Statement
Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样。
- 执行DDL、DML语句
- 执行DQL语句
5.4 ResultSet
ResultSet(结果集对象)作用:
- 封装了SQL查询语句的结果
ResultSet executeQuery(sql):执行DQL 语句,返回ResultSet 对象
- 获取查询结果
boolean next() (1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行 方法返回值说明: true : 有效航,当前行有数据 false : 无效行,当前行没有数据
xxx getXxx(参数):获取数据 xxx : 数据类型;如: int getInt(参数) ;String getString(参数) 参数 int类型的参数:列的编号,从1开始 String类型的参数: 列的名称
5.6 PreparedStatement
PreparedStatement作用:
- 预编译SQL语句并执行:预防SQL注入问题
PreparedStatement 好处:
- 预编译SQL,性能更高
- 防止SQL注入:==将敏感字符进行转义==
0x06 数据库连接池简介
数据库连接池是个容器,负责分配、管理数据库连接(Connection)
它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
好处
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
0x07 Driud使用
- 导入jar包 druid-1.1.12.jar
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接
0x08 JDBC练习
8.1 需求
完成商品品牌数据的增删改查操作
- 查询:查询所有数据
- 添加:添加品牌
- 修改:根据id修改
- 删除:根据id删除
8.2 案例实现
8.2.1 环境准备
- 数据库表 tb_brand
- 在pojo包下实体类 Brand
8.2.2 查询所有
8.2.3 添加数据
8.2.4 修改数据
8.2.5 删除数据