黑马程序员技术交流社区
标题:
【石家庄校区】BootStrap、MySQL、多表事务、JDBC基础笔记
[打印本页]
作者:
chenlong43210
时间:
2018-5-9 15:27
标题:
【石家庄校区】BootStrap、MySQL、多表事务、JDBC基础笔记
本帖最后由 小石姐姐 于 2018-5-11 09:49 编辑
BootStrap
BootStrap
:前端响应式框架,基于HTML、CSS、JavaScript。
响应式:对于不同设备显示不同效果
下载bootstrap
网站:
http://www.bootcss.com/
下载:用于生产环境的Bootstrap
使用步骤
:
1.导入 jquery.js
2.导入2个 bootstrap.css
3.导入 bootstrap.js
为了确保适当的绘制和触屏缩放,需要在<head>之中添加viewport元数据标签。
<meta name="viewport" content="width=device-width, initial-scale=1.0">
固定宽度
<div class="container">...</div>
100%宽度
<div class="container-fluid">...</div>
栅格系统
bootstrap将每一行分成12份。可嵌套
行 .row
列
.col-lg-n 分辨率>1200px
.col-md-n 1200px>分辨率>992px
.col-sm-n 992px>分辨率>768px
.col-xs-n 768px>分辨率
.col-xx-offset-n 列偏移,跳过n格 再显示
全局CSS
图片img
.img-responsive 图片适应外部div
max-width: 100%; 和 height: auto;
列表ul|ol
.list-inline 列表项在一行上显示
组件
插件:模态框、标签页
MySQL
MySQL
:关系型数据库
登录MySQL
mysql -u root -p 密码 [-h xxx -P xxx] //连接数据库
-h 主机名
-P 端口号
退出系统,显示Bye即可:exit
查看数据库中与字符集相关参数:show variables like '%character%';
解决中文乱码问题
原理:
客户端 默认编码 GBK
MySQL服务器内部客户端 默认UTF8
MySQL服务器内部服务端 默认UTF8
解决:修改客户端 和 MySQL服务器内部客户端 编码一致即可。
MySQL安装目录 my.ini 文件。:[client] 下 default-character-set=gbk。MySQL服务器客户端编码设置成gbk。需重启服务
重置MySQL密码
1. 停止MySQL服务
2. cmd -> mysqld --skip-grant-tables
3. 新cmd -> 登录MySQL,不需要输入密码
4. 修改root密码
use mysql;
update user set password = password('123') where user = 'root';
5. 结束mysqld进程。任务管理器中结束
6. 重启MySQL服务
数据库备份和还原
数据库备份
1. cmd-> mysqldump -u root -p 数据库名 >C:/xxx.sql
输入密码即可
数据库还原
方式一:
1. 在数据库内部创建数据库
2. cmd -> mysql -u root -p 数据库名 < C:/xxx.sql
输入密码即可
方式二:
1. 在数据库内部创建数据库
2. 切换到该数据库
source C:/xxx.sql
数据库
:存储数据的仓库,本质是一个文件系统,将数据按照特定格式存储起来,通过标准的SQL访问,对数据库数据进行增加,修改,删除,查询
关系型数据库
:存放实体和实体间的关系
DBMS
(DataBase Management System)数据库管理系统:操作和管理数据库的软件,用于建立、使用和维护数据库。
数据库服务器存储方式
:
1. 一台电脑安装了xxx数据库,这台电脑称为xxx数据库服务器
2. 数据库服务器中会创建很多数据库(一个项目,会创建一个数据库)
3. 数据库中会创建多张表(一个实体会创建一个表)
4. 表中会有很多记录(一个实例会向表添加一条新的记录)
5. 表中有多个字段(一个实体的属性对应一个字段)
SQL(Structured Query Language)结构化查询语言:用于操作数据库的语言。
SQL分类:
DDL(Data Definition Language) 数据定义语言:定义数据库,表,列等。create,drop,alter,truncate 等 。事务不可控制
DML(Data Manipulation Language)数据操作语言:对数据库中表的记录进行更新。insert,delete,update等。事务可控制
DCL(Data Control Language)数据控制语言:定义数据库的访问权限和安全级别,及创建用户。Grant,if等
DQL(Data Query Language)数据查询语言:查询数据库中表的记录。select,from,where等
数据库操作
—创建数据库
create database 数据库名 [character set 字符集 [collate 字符集校对规则]];
—查看数据库
show databases; --显示所有数据库
show create database 数据库名; --查看某个数据库的定义信息
—修改数据库
alter database 数据库名 character set 新字符集 collate 新校对规则;
—删除数据库
drop database 数据库名;
—切换数据库
use 数据库名; --切换使用数据库
select database(); --查看当前正在使用的数据库
单表操作
—创建表
create table 表名(
字段名 字段类型(长度) 约束,
字段名称 字段类型(长度) 约束
…
);
—查看表
show tables; --查看数据库中所有表
desc 表名; --查看表的详细结构信息
—删除表
drop table 表名;
—修改表
alter table 表名
alter table 表名 add 列名 数据类型 约束; --添加列(字段),
alter table 表名 modify 列名 新数据类型 新约束; --修改列类型,长度和约束
alter table 表名 change 旧列名 新列名 数据类型 约束; --修改列名
alter table 表名 drop 列名; --删除列
alter table 表名 character set 字符集; --修改表的字符集。不乱改
rename table 表名 to 新表名; --修改表名
数据类型
finyint/smallint/int/bigint
float/double
bit(0、1)
char 和 varchar(长度表示的是位数(字符个数))
date/time/datetime/timestramp
BLOB/TEXT
约束
主键约束 primary key (默认唯一非空)
唯一约束 unique
非空约束 not null
表记录操作
—添加
insert into 表名
(列1,列2...) values (值1,值2...) --给指定字段添加数据
insert into 表名
values (值1,值2...); --给所有列添加数据
insert into 表名
(列1...) values (值1...),(值1...); --批量添加数据
注意事项:
值的类型与表中列的类型一致。
值的顺序与表中列的顺序一致。
值的最大长度不能超过列设置最大长度。
值的类型是字符串或者是日期类型,使用单引号引起来。
—修改
update 表名 set 列1=值1,列2=值2... [where 条件];
—删除
delete from 表名 [where 条件]; --
如果不写条件,逐条删除,不清空auto_increment 记录数
truncate table; --摧毁表,删除所有数据,重建表。效率高
表记录查询
select [distinct] *|列1 [as '列别名'],... from 表名 [[as] '表别名'] --基本查询
where 条件 --条件查询,筛选,过滤
group by 列名 --分组查询,必须跟随聚合函数,对每组进行计算
having 条件 --对分组查询后筛选
order by 列名 [desc|asc],列2 [desc|asc]... --排序查询,默认升序。如果前一列相同按照第二列排序...
distinct:去除重复,多个字段时都相同为重复
asc :升序(默认,日期为从过去到现在)
desc:降序
条件
:数据中唯一性的列
=,>,<,>=,<=,<>(不等于)
like --模糊查询。占位符:%代表任意个字符,_代表一个字符
[not] in (值1,值2...) --范围查询,[不]包含
and|or|not --关联查询,与|或|非
between 值1 and 值2 --某一区间(值1要小于值2,含头尾)
is [not] null --[不]为空
聚合函数
,对一列进行计算,返回单一的值
count(列名) --统计指定列不为null的记录行数。建议写主键列名。
sum(列名) --计算指定列的数之和,不是数值类型,结果为0
ifnull(列名,值) --该字段若为null,则使用该值
max(列名) --计算指定列的最大值,如果字符串,使用字符串排序
min(列名) --计算指定列的最小值,如果字符串,使用字符串排序
avg(列名) --计算指定列的平均值,不是数值类型结果为0
多表事务
多表设计
命名:约束名:fk‘从表名随便写’
多表
外键约束
:保证多表之间数据完整性。
给从表添加外键约束
alter table 从表名 add foreign key(从表外键列名) references 主表名(主表主键列名)
特点:主表不能删除从表中已经引入的数据
一对多
建表原则:在多方创建外键指向一方的主键。从表中添加字段(建议:主表名_id),这个字段称为外键,并且一般设置为非空。开发中一般不设置为真外键。
多对多
建表原则:创建第三张表(中间表),中间表至少两个字段分别作为外键,分别指向两个表的主键。
一对一
建表原则:
唯一外键对应方式:在任意一方表添加外键,指向另一方表的主键。(外键一般添加唯一约束)(如果不需要分成两个表,两表合一即可)
主键对应方式:两个表的主键对应(相等)(一般不采用,不该对主键再赋予业务含义)
多表连接查询
交叉连接:查询到的是两个表的笛卡尔积
1. select * from 表1 cross join 表2;
2. select * from 表1,表2;
内连接:(inner join,inner可省略)返回两表交集。根据关联条件(主表主键=从表外键),从两个表匹配,返回匹配上的记录,匹配不上则不返回。
1.显示内连接
select * from 表1 [inner] join 表2 关联条件;
2.隐式内连接(常用)
select * from 表1,表2 where 关联条件;
外链接(outer join, outer可省略)
左外连接:以左表为基准,根据关联条件去右表查询,匹配上则返回,匹配不上返回null
select * from 表1 left [outer] join 表2 on 关联条件;
右外连接
select * from 表1 right [outer] join 表2 on 关联条件;
内连接与外链接区别:
1.内连接 查询两个表的交集
2.外连接 查询两个表的交集和左表(或右表)的数据
子查询:
一个查询语句条件需要依赖另一个查询语句的结果。
带in的子查询
... where 字段名 in (查询语句|值); --多个值逗号隔开。返回该字段中包含值得的记录
带exists的子查询
... where exists (查询语句); --查询语句查询记过记录存在,则前面的SQL语句执行
带any的子查询
... where 字段名 > any(查询语句); --返回该字段大于括号中任意值的记录(也就是大于最小值)
带all的子查询
... where 字段名 > all(查询语句); --返回该字段大于括号中所有值的记录(也就是大于最大值)
事务
事务指逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败。
MySQL中事务管理
start transaction; --开启事务
commit; --提交事务
rollback; --回滚事务
ACID特性
- 原子性(Atomicity):事务不可分割,组成事务的各个逻辑单元不可分割
- 一致性(Consistency):事务执行前后,数据完整性保持一致
- 隔离性(Isolation):事务执行不应该受到其他事务的干扰
- 持久性(Durability):事务一旦结束,数据就持久化到数据库中
不考虑隔离性引发的安全问题
- 脏读:一个事务读到另一个事务未提交的数据,导致查询结果跟实际数据不一致
- 不可重复读:一个事务读到另一个事务已经提交的update数据,导致多次查询结果不一致
- 虚读/幻读:一个事务读到另一个事务已经提交的insert数据,导致多次查询结果不一致
解决这些安全性问题
事务隔离级别
read uncommitted --脏读、不可重复读、虚读都有可能发生
read committed --避免脏读。
repeatable read --避免脏读、不可重复读
serializable --避免脏读、不可重复读、虚读
设置事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别
查看当前事务隔离级别
SELECT @@tx_isolation;
JDBC基础
JDBC
(Java Data Base Connectivity)Java数据库连接:Sun公司提供的一套统一规范(接口),用于执行SQL语句的Java API。
驱动
:两个设备(应用)之间通信的桥梁
数据库驱动
:也是类库,每个数据库厂商提供实现了这套规范的实现类。
使用步骤
:
- 注册驱动。告诉JVM使用的是哪一个数据库驱动
- 获得连接。DriverManager -> Connection
- 获取执行SQL对象。Connection -> 执行SQL对象
- 处理结果。执行SQL对象 -> Result|int
- 释放资源。Connection、执行SQL对象、ResultSet。close()
注册驱动
//因为Driver类的静态代码中调用了DriverManager.registerDriver()方法,所以直接加载类即可
Class.forName("com.mysql.jdbc.Driver") //加载MySQL驱动
驱动管理工具类
DriverManager
//注册驱动
registerDriver(java.sql.Driver)
此方式不使用,存在两方面不足
1) 硬编码,后期不易于程序扩展和维护
2) 驱动被注册两次。原因:实现类源码,静态代码块已经调用此方法进行注册
//获取数据库连接对象。返回Connection接口的MySQL包中实现类对象
Connection getConnection(String url,String user,String password)
url数据库地址:"jdbc:mysql://数据库服务器主机地址:端口号/数据库名" //jdbc:连接数据库的协议。mysql:是jdbc的子协议
连接本地可简写:"jdbc:mysql:///数据库名"
数据库连接接口
Connection
//获取执行SQL对象
Statement createStatement()
PreparedStatement preparedStatement(String sql) //SQL语句中参数采用?占位符。对SQL语句进行预处理
CallableStatement prepareCall(String sql) //执行数据库中存储过程
//管理事务
setAutoCommit(boolean autoCommit) //设置是否自动提交事务。设置为false,相当于开启事务,后面的execute可以commit或rollback
commit() //提交
rollback() //回滚
执行SQL接口
Statement 接口。(开发不用)
//执行SQL
int executeUpdate(String sql) //执行(insert,update,delete),返回影响的行数
ResultSet executeQuery(String sql) //执行(select),返回ResultSet
//执行批处理。需在URL后添加参数"?rewriteBatchedStatements=true"
addBatch(String sql) //将SQL添加到批处理
clearBatch() //清空此对象的当前SQL命令列表
executeBatch() //将一批命令执行,不会清空批处理
PreparedStatement 接口
setXxx(int,值) //设置?占位符参数。位置从1开始
int executeUpdate() //执行SQL语句
ResultSet executeQuery() //执行查询SQL语句
//批处理。SQL语句只编译一次,设置不同参数即可
addBatch() //将SQL添加到批处理
结果集
ResultSet 接口
Boolean next() //第一次调用光标指向第一行。没有数据则返回false
xxx getXxx(String colName) //根据列名|列索引获取字段数据。如果取了别名,则根据别名获取结果
Object getObject(String colName)
JDBC释放资源
Connection对象要做到尽量晚创建,尽早释放。
释放资源的代码写入finally代码块中
if(对象!=null){
try{
对象.close();
}catch(SQLException e){
e.printStackTrace();
}
对象=null; //断开引用指向,可以尽早回收不用的资源
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2