71.【MySQL-二刷】
创始人
2024-04-05 03:22:16
0

数据库二遍

    • 1.操作数据库语句
    • 2.数据库列类型
    • 3.数据库的字段属性
    • 4.数据库的主键添加(primary key())
    • 5.删除数据表的两种格式---------》drop and delete
    • 6.限制结果--------》limit A offset B
    • 7.排序子句---------》order by(默认为升序)
    • 8.低级过滤数据---------》条件判断
    • 9. 高级数据过滤--------》操作符
    • 10.用通配符进行过滤----------》like
    • 11.创建计算字段
    • 12.别名:-----AS
    • 13.去重---------distinct
    • 14.分页子句------limit
    • 15.字符串函数/日期/拼接
    • 16.聚合函数不允许在where后使用/on用于连接不用于判断
    • 17.数据库级别的MD5加密(扩展)
    • 18.事务(自动提交/手动提交)
    • 19.事务(不修改事务提交方式,如何控制事务)
    • 20.事务的四大特性(ACID)
    • 21.并发事务问题/事务隔离级别(解决事务并发问题)
    • 22.组合查询(union)
    • 23.索引(讲的不好)
    • 24.数据库用户管理(用户权限管理)
    • 25.数据库用户管理(MySQL备份)
    • 26.规范数据库设计(重点)
    • 27.数据库三大范式:
    • 28.JDBC
    • 29.JDBC链接IDEA
    • 30.设置工具类(配置文件 Statement)
    • 31.SQL注入问题(用户信息不安全)
    • 32.PreparedStatement
    • 33.数据库连接池(用户访问数量限制)

1.操作数据库语句

假如说,库名是一个特殊的关键字。为了进行区分关键字和库名,我们可以使用
TAB键上面的(飘号)----->``.进行区分库名和关键字。

在这里插入图片描述

  • eg: 库的名字叫USE,进行使用库的操作时候
    在这里插入图片描述

2.数据库列类型

1.数值:
(1).tinyint: ---------》1个字节 ---------》(十分小的数据)
(2).smallint: ---------》 2个字节---------》(较小的数据)
(3).mediumint: ---------》3个字节---------》(中等的数据)
(4).int ---------》4个字节 
(5).big ---------》8个字节
-------------------------------------
float: ---------》4个字节  ---------》(精度不好)
double: ---------》8个字节 ---------》(精度不好)
decimal:  ---------》字符串形式的浮点数,---------》(精度高)
2.字符串:
(1).char---------》字符串固定大小的 0~255 
(2).varchar ---------》可变字符串 0~65535
(3).tinytext---------》微型文本 2^8-1---------》(写博客文档)
(4).text---------》大型文本---------》2^16-1---------》(超大文本)
3.日期:
(1).date---------》yyy-mm-dd---------》(日期格式)
(2).time---------》hh:mm:ss---------》(时间格式)
(3).datetime ---------》yy:mm:dd:hh:mm:ss---------》(日期+时间)
(4).timestamp---------》时间戳
(5).year---------》年
4.null
(1).没有值,未知。
(2).不要使用null进行运算,因为结果还是null;

3.数据库的字段属性

1.unsigned:(0~65535)
(1).无符号的整数。(没有负号)
(2).声明了该列不能为负数,只能为正数。
2.zerofill
(1).0填充的---------》(用0进行补位的操作)
(2).不足的位数,使用0来填充。
eg: int(3)---------》整形且3位。 输入5 填充后 005;
3.auto_increment
(1).自动在上一行的基础上+1(默认)
(2).通常用来设计唯一的主键,必须是整数类型
(3).可以自定义设计主键自增的起始值和步长
4.not null
(1).假设设置为not null,如果不给他赋值,就会报错
(2).null,如果不填写,默认就是null;

4.数据库的主键添加(primary key())

create database demo1;
create table if not exists `student`(`id` int(10)  auto_increment,`name` varchar(20) not null,`sex` varchar(20) not null,`qq` int(11) not null unique,primary key(id)
);
阿里巴巴规范,在最后的语句中添加主键:
primary key(id)

5.删除数据表的两种格式---------》drop and delete

1.彻底删除包括数据表的属性和数据:
drop table `被删除的数据表名`;

这里是引用

2.仅删除数据库的数据信息,不删除数据库的属性
truncate table `student`;

这里是引用

6.限制结果--------》limit A offset B

select name from `student` LIMIT (返回几行) OFFSET (第几行开始);

这里是引用

7.排序子句---------》order by(默认为升序)

1.如果不排序,数据一般将以他在表中出现的顺序显示,这有可能是数据最初
添加到表中的顺序,但是如果数据随后进行过更新或删除,那么这个顺序将会
受到DBMS重用回收存储空间的方式的影响。
2.oreder by 子句必须保证它是select 语句中最后一条子句。如果不是最后一条
那么将会进行报错的处理。
3.按多个列进行排序
select *from `student` order by (第一条件),(第二条件);
假如说:在第一条件相等的情况下,那么我们就进行比较第二条件

这里是引用

4.自定义排序方向
(1).order by=========>默认升序排序
(2).order by desc========>降序排序
(3).order by asc========>升序排序
(4).DESC 关键字只应用到直接位于其前面的列名。如果想对多个列进行排序,那么
我们必须对内一列指定DESC关键字。
eg:  SELECT *FROM `student` ORDER BY id DESC;eg:  SELECT *FROM `student` ORDER BY id DESC,sex DESC;

这里是引用

8.低级过滤数据---------》条件判断

1.where 子句优先级高于 order by ,所以where 的位置在order的前面。
2.切记NULL和非匹配(<>)是不一样的。

这里是引用

9. 高级数据过滤--------》操作符

1.and的优先级高于or的优先级。
假如说and和or同时出现的话,那么将会先执行and、然后执行or

这里是引用

2. ()的优先级高于and和or

这里是引用

3. in操作符:用来指定条件范围,范围中的每个条件都可以进行匹配,in取
一组由逗号分隔,括在圆括号中的合法值。
为什么要使用in而不是or?
(1).in操作符一般比一组or操作符执行的更快。
(2).in操作符的最大优点就是可以包含其他select语句,能够更动态地建立where子句。

这里是引用

4.NOT操作符:where子句中地NOT操作符有且只有一个功能,那就是否定其后所跟
的任何条件。

这里是引用

10.用通配符进行过滤----------》like

1.like操作符:like操作符相较于以前常规的操作符最大的区别就是:以前常规的
操作符需要知道值,like 操作符可以实现在未知的情况下进行操作。
2.通配符需要和操作符进行协助才能生效
2.百分号(%)通配符,在搜索串中,%表示任何字符出现任意次数。
(1).%放在字符的前面,就是说:以什么什么结尾。
(2).%放在字符的后面,就是说:以什么什么开头。
(3).%在字符的前面和后面,就是说:以什么什么在中间
(4).先后关系                                                                                                                                                                                                                                                                                                                                                                                                                      

这里是引用

3.下划线(_)通配符:下划线的用处和%一样,但它只匹配单个字符,而不是多个字符

这里是引用

4.方括号[],通配符:用来指定一个字符集。^(脱字号)
select *from `student` where qq like '[AB]%';---》查找以A或B开头的QQ
select *from `student` where qq like '[^AB]%';---》查找不以A或B开头的QQ
5.通配符效率低,可以不用就不用。

11.创建计算字段

1.拼接字段:
select concat(name,id) from `student`;

这里是引用

12.别名:-----AS

AS '别名':------->有利于我们进行阅读

这里是引用

13.去重---------distinct

1.distinct 去重的操作。

这里是引用

14.分页子句------limit

1.分页函数放在排序子句的后面:
where ----->like --->order by---->limit
eg:select *from student order by id limit 0,3;

这里是引用

15.字符串函数/日期/拼接

1.concat()----->字符串拼接
2.char_length()---->字符串拼写
3.innert(str,1,2,str1)----->用str1替换str,从第一个字符开始到第二个字符
4.instr('str','s')--------->查询s所在字符串中第几个位置。
5.replace(str,a,b)--------->用b替换出现在str字符串中的a字符
6.select current_date();----》当前日期
7.select curdate()-----》当前日期
8.select now();------》当前年月日时间
9.select sysdate();----》系统时间
10. select second(now());-----》当前秒
11.  select user();--------》当前用户

1-3在这里插入图片描述
4
这里是引用
5-11
在这里插入图片描述

16.聚合函数不允许在where后使用/on用于连接不用于判断

1.聚合函数不允许在where后使用,如果非要进行判断,需要在having后使用

这里是引用

17.数据库级别的MD5加密(扩展)

1.什么是MD5?
一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald LinnRivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

1.主要作用:增强算法复杂度和不可逆性;
(1).MD5不可逆,具体的值的md5是一样;
(2).破解密码原理:把简单的密码都放在一个字典中,如果对MD5破解成功,
那么就返回正确的密码,否则返回MD5加密后的伪密码
1.在插入数据之后,再进行加密的操作:
update admin set password=md5(password) where id=1;--->对id为1d的数据进行加密
update admin set password=md5(password)------》对所有数据进行加密
create table admin(id int(11) auto_increment,name varchar(20) not null,password varchar(20) not null,primary key(id)
);
insert into admin values(null,'李黑',md5('123456'));
update admin set password=md5(password) where id=1;

这里是引用

2.在插入数据的同时,进行MD5加密的操作
insert into admin values(null,'李黑',md5('123456'));

这里是引用

3.MD5,加密后密码如何进行校验?
select *from admin where password=md5('123456');

这里是引用

18.事务(自动提交/手动提交)

1.一个语句就是一个事务,-----》默认的,也就是自动提交的
create table account(id int primary key auto_increment,
name varchar(20) not null,
money int
);
insert into account(name,money) values('张三',2000),('李四',2000);
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';
1.在自动提交的前提下,张三和李四的钱会得到正确的变动,假如说不是自动提交,就会出现一些事故。

1.自动提交不会报错这里是引用

2.模拟排错..........程序排除异常....
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';

2.自动提交的情况下模拟转账出错
在这里插入图片描述
在这里插入图片描述

3.事务操作:(手动操作在当前的表中可变化,在另一个表中不变化)
(1).查看事务的提交方式:
select @@autocommit;
(2).设置事务的提交方式:
set @@autocommit=0; (手动)
(3).手动提交事务:
commit;  (当sql见到这个语句的时候,才会从缓冲区提取出来执行,就相当于
自动提交时候的分号)
(4).回滚事务:
rollback: (当事务遇到异常的时候,就会实现数据的回滚)

1.设置为手动提交的时候,此窗口的数据是变化可见的,但其他窗口不变
()不提交的前提下在这里插入图片描述
2.输入commit后,另一个窗口就会改变
在这里插入图片描述
3.手动提交并不能解决(转账问题),只有rollback回滚数据才可以
在这里插入图片描述
4.如果有异常就实现数据的回滚
在这里插入图片描述

19.事务(不修改事务提交方式,如何控制事务)

1.开启事务:
start transaction或begin
2.提交事务:
commit
3.回滚事务:
rollback

1.不改变事务提交方式的前提下,进行控制事务这里是引用

20.事务的四大特性(ACID)

1.原子性:
针对一个事务,这个事务要么一起成功,要么一起失败。
2.一致性: 
无论数据怎么转(转钱),数据的最终数据都是一样的(比如800,200,最终数据是100)-《最终结果一致性》
3.持久性:
事务结束后的数据不会随着外部原因导致数据丢失。(断电、服务器崩溃)
(1).事务没有提交就会自动回滚数据。
(2).事务如果已经提交那么数据就是提交后的结果。
4.隔离性:
针对多个用户同时操作,主要是排除其他事务对本次事务的影响;
eg: A-->转钱B;  C---->转钱B。 
会有一个隔离级别,假如隔离成功就能同时运行,否则就会出现隔离级别问题

1.原子性:
在这里插入图片描述
2.一致性(最终结果一致)
在这里插入图片描述
3.持久性
在这里插入图片描述

4.隔离性
在这里插入图片描述

21.并发事务问题/事务隔离级别(解决事务并发问题)

1.事务的隔离级别:
(1).胀读:指一个事务读取了另外一个未提交的事务。
(2).不可重复读:一个事务先后读取同一条记录,但两次读取的数据结果不同,称之为不可重复读
(3).幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了欢迎。
2.隔离级别:(四大隔离级别/解决事务并发问题)
(1).read uncommitted  (不可以解决:胀读 不可重复读 幻读)
(2).read committed (不可以解决:不可重复读 幻读)
(3).repeatable read(默认) (不可以解决:幻读)
(4).serializable (都可解决)
3.查看事务的隔离级别:
(1).select @@tx_isolation;
设置事务隔离级别
(2).set [session | global] transaction isolation level { 隔离等级}; 

1.模拟脏读的现象(read uncommitted) 读到未提交的数据
在这里插入图片描述
2.解决脏读(read committed)
在这里插入图片描述
3.模拟不可重复读的问题(readn committed)
在这里插入图片描述
4.解决不可重复读问题在这里插入图片描述
5.模拟幻读的问题:
在这里插入图片描述
6.解决幻读的问题在这里插入图片描述

22.组合查询(union)

  • Union必须有两条或者两条以上的select 语句组成,语句之间用关键字Union分割,(因此,如果组合四条select 语句,将要使用三个union)
  • union中的每个查询必须包含相同的列,表达式或聚集函数(不过,各个列不需要以相同的次序列出)
  • 列数据类型必须兼容:类型不必完全相同,但必须时DBMS可以隐含转换的类型。
1. union: 组合查询,会查找全部信息(但不包括重复信息)
2. select name from student where id=1 union  select name from student where id=1;
3. union all: 组合查询,会查找全部信息(包括重复信息)
4. select name from student where id=1 union all select name from student where id=1;

这里是引用

23.索引(讲的不好)

1.索引的定义:
MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。
提取句子主干,就可以得到索引的本质: 索引是数据结构。
2.索引的分类:
(1).主键索引(primary key)=====>唯一性,主键不可重复,一个表只能有一个
(2).唯一索引(unique key)======》避免重复的列出现,一个表可以有多个唯一索引
(3).常规索引(key/index)=======》默认的,
(4).全文索引(FullText)========》在特定的数据库引擎下才有
3.显示所有的索引信息:
show index from <表名>;
4.分析SQL的语句
explain select *from student;

1.展示所有的索引信息在这里插入图片描述
2.展示执行SQL执行的状况
在这里插入图片描述

24.数据库用户管理(用户权限管理)

1.权限管理:
(1).用户管理: 可视化界面对用户的添加和删除

1.添加用户:
在这里插入图片描述
2.给这个用户权限设置
在这里插入图片描述
3.让此用户允许在指定的数据库操作的权限
在这里插入图片描述
4.进行链接的操作
在这里插入图片描述
5.自己创建的数据库用户链接成功
在这里插入图片描述

2.利用SQL语句进行用户管理:
(1).本质:读mysql中的user这张表,对这张表增删改查;
(2).创建用户:
CREATE USER <用户名> IDENTIFIED BY '<密码>';
eg:   CREATE USER liming IDENTIFIED BY '121788';
(3).修改本机密码:
SET PASSWORD=PASSWORD('<密码>');
eg:  SET PASSWORD=PASSWORD('123456');
(4).修改指定用户密码:
SET PASSWORD FOR <指定数据库>=PASSWORD('密码');
eg:  SET PASSWORD FOR liming=PASSWORD('123456');
(5).对用户名进行重命名RENAME USER <原用户名> to <更改后的数据名>;
eg: RENAME USER liming to liming2;
(6).用户授权GRANT ALL PRIVILEGES ON <库.表> TO <授权的用户名>;
eg: GRANT ALL PRIVILEGES ON *.* TO liming2;  (全部授权)
(7).查看指定用户的权限
show  grants for <查看的用户名>;
eg:show  grants for liming2;
(8).查看本机用户的权限show  grants for root@localhost;
(9).撤销指定用户权限REVOKE ALL PRIVILEGES ON 库名.表名 FROM 用户名;
eg: REVOKE ALL PRIVILEGES ON *.* FROM liming2; 
(10).删除用户
DROP USER <用户名>;
DROP USER liming2;

1.创建用户并且指定密码
在这里插入图片描述
2.重命名用户名
在这里插入图片描述
3.授权
在这里插入图片描述
4.查看指定用户的权限
在这里插入图片描述
5.查看本机用户的权限
在这里插入图片描述
6.撤销用户的权限
在这里插入图片描述
7.删除用户
在这里插入图片描述

25.数据库用户管理(MySQL备份)

1.为什么要备份?
(1).保证重要的数据不丢失。
(2).数据转移 A--->B
2.MySQL数据库备份的方式:
(1).物理备份(拷贝data)
(2).使用命令行(cmd),
(3).导出:
命令行:
mysqldump -h(主机名) -uroot -p密码 库名 表名1 表名2 >E:/a.sql;
mysqldump -h(主机名) -uroot -p密码 库名  >E:/a.sql;
eg:mysqldump -hlocalhost -uroot -p121788 demo1 student >E:/a.sql;
(4).导入:
sql语句:
source 位置;
source e:/a.sql;

1.数据库的导出这里是引用
在这里插入图片描述

26.规范数据库设计(重点)

1.为什么要规范数据库设计2.糟糕的数据库设计
(1).数据冗余,浪费空间
(2).数据插入和删除都会比较麻烦
(3).程序的性能差
3.良好的数据库设计
(1).节省内存空间
(2).保证数据库的完整性
(3).方便我们开发系统
4.软件开发中,关于数据库的设计
(1).分析需求: 分析业务和需要处理的数据库的需求- [ ] 创建相应的表(2).概要设计: 设计关系图 E-R 图- [ ] 表与表之间的关系

27.数据库三大范式:

1.为什么需要数据规范?
(1).信息重复
(2).更新异常
(3).插入异常
(4).删除异常
1.第一范式(1NF):要求数据库表中的每一列都是不可分割的原子数据项;
原子性:保证每一列不可以再分,

1.其中地址那个东西概念比较模糊,还能继续再分这里是引用
2.第一范式正确用法:字段不会再进行分割在这里插入图片描述

2.第二范式(2NF): 满足第一范式,且确保表中的每一列都和主键相关。
也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

1.第二范式反列:(id和商品号称为联合主键)数据库的表应该进行拆分
在这里插入图片描述
2.我们应该把表的信息进行拆分为多张表
在这里插入图片描述

联合主键: 就是两个字段属性/多个字段属性作为主键
(1).在创建表的同时添加联合主键:(2).创建表之后添加联合主键:
alter table 表名 add primary key(列名1,列名2);
eg: alter table information add primary key(id,goods_id);

1.联合主键:(创建表之后再添加联合主键)
在这里插入图片描述

3.第三范式(确保每列都和主键列直接相关,而不是间接相关)《外键》
(1).我们在一个表中,订单编号和商品编号应该分别设置成两张表,运用外键进行关联

1.第三范式:(反列)这里是引用
2.正列:
在这里插入图片描述

28.JDBC

1.数据库驱动:
驱动: 声卡,显卡。
2.为什么要使用数据库驱动?
(1).通过驱动实现应用程序和数据库的链接

这里是引用

2.什么是JDBC
SUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个(Java数据库的)规范。俗称JDBC==(java database connection),这些规范的实现由厂商来做。
(1).java.sql-jar
(2).mysql-connction-jar

这里是引用

29.JDBC链接IDEA

基本步骤:
1.加载驱动
2.地址,用户名,密码
3.链接成功,数据库对象
4.执行sql的对象  
5.返回结果级 (链表的形式)
7.释放连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class JDBC {public static void main(String[] args) {try {//1.加载驱动Class.forName("org.gjt.mm.mysql.Driver");//2.地址,用户名,密码 链接String url="jdbc:mysql://127.0.0.1:3306/demo1?useUnicode=true&characterEncoding=utf8&useSSl=true"; //支持中文编码,设置字符集 使用安全的链接String userName="root";String passWord="121788";//3.链接成功,数据库对象 connection 代表数据库Connection cn= DriverManager.getConnection(url,userName,passWord);//String sql="select *from information";//4.执行sql的对象   preparedStatement执行sql的对象PreparedStatement preparedStatement=cn.prepareStatement(sql);//5.返回结果级 (链表的形式)ResultSet resultSet = preparedStatement.executeQuery();//6.遍历while (resultSet.next()){System.out.println(resultSet.getString(1)+" "+resultSet.getString(2)+" "+resultSet.getString(3));}//7.释放连接resultSet.close();preparedStatement.close();cn.close();} catch (Exception e) {e.printStackTrace();}}
}

30.设置工具类(配置文件 Statement)

1.设置配置文件: 在SRC包设置文件《db.properties》driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demo1?useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=121788

在这里插入图片描述

2.设置一个工具类: 名字叫做 《informationUtils》package utils;import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class InformationUtils {
//    提升作用域private static String driver=null;private static String url=null;private static String username=null;private static String password=null;
//  第一个被运行,而且只能运行一次static {try{
//            1.获取配置文件的输入流InputStream in = InformationUtils.class.getClassLoader().getResourceAsStream("db.properties");
//            2.创建一个对象Properties properties = new Properties();
//            3.读取输入字节流properties.load(in);
//            4.获取文件里面的指定资源driver=properties.getProperty("driver");url=properties.getProperty("url");username=properties.getProperty("username");password=properties.getProperty("password");
//            5.驱动只用加载一次Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}
//             6.获取链接public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url,username,password);}
//             7.释放连接public static void release(Connection connection, Statement statement, ResultSet resultSet){if(resultSet!=null){try {resultSet.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(statement!=null){try {statement.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}
}

这里是引用

3.进行引用工具类(方法实现)package utils;import java.sql.*;public class TestUtils {public static void main(String[] args) {
//        增加变量的作用域Connection connection=null;Statement statement=null;ResultSet resultSet=null;try {
//            1.链接connection=InformationUtils.getConnection();
//            2.获得执行sql的对象statement=connection.createStatement();String sql="insert into information values (4,'004','小黑',2,'个',2032,'李威涛','吉林',1235)";int i=statement.executeUpdate(sql);if(i>0){System.out.println("插入成功");}} catch (SQLException throwables) {throwables.printStackTrace();}finally {InformationUtils.release(connection,statement,resultSet);}}
}

这里是引用

31.SQL注入问题(用户信息不安全)

SQL注入的发生,通常是恶意用户通过在表单中填写包含SQL关键字的数据,来使数据库执行非常规逻辑的过程。
1.当我们使用Statement这个对象的时候,我们在数据导入的时候可能会存在SQL注入
的问题,也就是说sql语句进行重新修改的问题.
package utils;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class SQL {public static void main(String[] args) {
//        1.正常登入
//        login("李明","121788");login("'or '1=1","'or ' 1=1");
//        login("'or 1 #'","2");
//}public static void login(String username,String password){//        增加变量的作用域Connection connection=null;Statement statement=null;ResultSet resultSet=null;try {
//            1.链接connection=InformationUtils.getConnection();
//            2.获得执行sql的对象statement=connection.createStatement();
//            select *from admin where name= or 1=1 and password= or 1=1;String sql="select *from admin where `name`='"+username+"' and `password`='"+password+"'";resultSet=statement.executeQuery(sql);while (resultSet.next()){System.out.println(resultSet.getInt(1)+" "+resultSet.getString(2)+" "+resultSet.getString(3));}} catch (SQLException throwables) {throwables.printStackTrace();}finally {InformationUtils.release(connection,statement,resultSet);}}
}

1.实现对用户信息的全部查询的效果,导致用户信息的泄露(MD5)加密有用处了。这里是引用

32.PreparedStatement

1.Statement与PreparedStatement的区别:
(一)、格式:
(1).前者: 驱动. 链接 .创建语句(createStatement) . 创建 sql语句. 把sql语句放入执行语句中.
(2).后者: 驱动. 链接. 创建sql语句. sql语句放入preparedStatemnt(预编译).  进行执行.
(二)、 进行插入和删除的时候:
(1).前者直接写即可
(2).后者需要用?当占位符,然后进行 preparedStatemenr.setObject(?的坐标,数据)

1.进行查询的操作这里是引用

package lesson2;import utils.InformationUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class preST {private static Connection connection=null;private static PreparedStatement preparedStatement=null;private static ResultSet resultSet=null;public static void main(String[] args) {try {
//            1.链接connection= InformationUtils.getConnection();
//String sql="insert into admin value (?,?,md5(?))";preparedStatement=connection.prepareStatement(sql);preparedStatement.setInt(1,4);preparedStatement.setString(2,"小明");preparedStatement.setString(3,"123456");int n= preparedStatement.executeUpdate();if(n>0){System.out.println("插入成功");}} catch (Exception throwables) {throwables.printStackTrace();}finally {InformationUtils.release(connection,preparedStatement,resultSet);}}
}

2.使用md5格式进行密码的加密的操作:
在这里插入图片描述
在这里插入图片描述

3.解决SQL注入的问题:
1.正常输入无问题在这里插入图片描述
2.非正常输入
在这里插入图片描述

33.数据库连接池(用户访问数量限制)

(一)、为什么要进行数据库连接池
1.数据库链接十分浪费资源。
(二)、什么是池化技术:
池化技术: 准备一些预先的资源,过来就链接预先准备好的。
eg:银行每天需要接纳很多客人,那么银行的门不能来一个开一次,走一个关一次,
所以我们因该设置接纳员进行等待,等待用户的到来,进行接纳。所以我们要设置
接纳员的个数,(最小连接数),(最多连接数),(常用连接数)
(三)、编写连接池 实现一个接口DataSource(数据源)
(1).常见开源数据库连接池:DBCP.C3P0.
(2).使用了这些数据库连接池之后,我们就不用再进行手动编写了
1.DBCP (连接池)

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
安卓文字转语音tts没有声音 安卓文字转语音TTS没有声音的问题在应用中比较常见,通常是由于一些设置或者代码逻辑问题导致的。本文将...
APK正在安装,但应用程序列表... 这个问题可能是由于以下原因导致的:应用程序安装的APK文件可能存在问题。设备上已经存在同名的应用程序...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...