jdbc学习笔记01

day01-03

day04:

  1. 分组 group by
    统计每个部门的平均工资:
    select deptno,avg(sal) from
    emp group by deptno;
    统计每个部门下每个领导下员工的最高工资
    select deptno,mgr,max(sal)
    from emp group by deptno,mgr;
  2. having 通常情况下 后面写聚合函数,然后和group by 结合使用
    对查询的普通字段进行结果筛选使用Where,对聚合函数的结果进行筛选使用having

统计每个部门的平均工资,只显示平均工资在2000以下的

select deptno,avg(sal) a from emp
group by deptno
having a<2000;

关联查询

等值链接和内链接

等值链接语法:select * from A,B
where A.某字段=B.某字段 and A.age<20;

内连接语法:
select * from A join B
on A.某字段=B.某字段
where A.age<20;
查询每个部门对应的每个员工,显示部门的名称和员工的名称

select d.dname,e.ename 
from emp e join dept d
on e.deptno=d.deptno

左外链接和右外链接

所有的分类和分类下的商品
select i.title,c.name
from t_item_category c left join t_item i
on c.id=i.category_id

子查询

子查询可以写在Where后面当成某个条件的值

工资最高的员工信息

select * from emp 
where sal=(select max(sal) from emp)

子查询可以写在from后面 可以当成一张新表,当新表用的时候必须加别名

day05

自关联

有层级关系的数据,但是有多少层不确定的可以使用自关联解决

id name mid
1 总部
2 教学部 1
3 java中心 2

查询id=2的部门名称和上级部门名

select d.name,m.name
from dept d join dept m
on d.mid = m.id
where d.id=2;

id name parentid
查询分类id=5的分类名和上级分类名
select c.name,p.name
from t_item_category c join t_item_category p
on c.parentid=p.id
where c.id=5

表的关联关系

一对一

用户表 和 用户信息表
user表
id username password
userinfo表
userid createdate nick sex email qq mobile

一对多

在多的一端添加一个关联关系的id指向少的一端的主键

多对多

需要建一张关联关系表 表中只保存两个表里数据的id

权限管理应用场景

用户-角色-模块  
用户和角色的关系表 
角色模块关系表

day06

视图

-视图是一张虚拟表,是一条sql语句的查询结果
-创建视图格式
create view v_emp as 子查询
-对视图内的数据进行dml 原表数据会跟着发生改变
-为了避免数据污染需要添加with check option
-只有insert语句可能会出现数据污染
-视图的作用:1.重用子查询提高开发效率 2.限制敏感数据的访问
-修改视图:
create or replace view v_emp as 子查询
-删除视图: drop view v_emp;

索引

索引分为两种:

  1. 聚集索引: 主键所创建的索引称为聚集索引,id对应着表内的数据
  2. 非聚集索引:非主键字段创建的索引称为非聚集索引,索引里面保持的数据是主键的值
    索引原理:如果一张表添加了主键 会自动创建聚集索引,里面保存这主键和数据的对于关系,如果创建一个非主键字段的索引(如:title)这种索引称为非聚集索引,里面保存着title和主键的对应关系,如果此时通过title去查询商品详情的时候会先从非聚集索引(title)查询,先查询到主键的id值,然后去自动创建出来的聚集索引中查询到详情数据
    通过price创建索引 索引里面保存的事price和主键的对应关系

    添加索引的格式

    create index 索引名 on 表名(字段名(长度),字段名)
    -如果创建索引时添加多个字段,则会创建一个索引 只不过索引内部的信息是A字段和B字段的
    create index index_title_price item2(title,price);
    select price from item2 where title='abc';

-多个字段的索引称为复合索引
-多个字段创建 也只是创建出来一个索引,如果查询的信息时,要查询的内容在所创建的索引中时则不需要再去聚集索引中查询

创建title索引

    create index index_title on item2(title);

查看已经创建的索引

show create table item2;

删除索引

drop index index_title on item2;

约束

-主键约束
-唯一约束 unique
-非空约束 not null
-默认约束 default
-外键约束 约束关联关系的
-check约束 没用

事务

四大特性

  1. 原子性
  2. 一致性
  3. 隔离性
  4. 持久性

JDBC

什么是JDBC

Java DataBase Connectivity
java数据库连接 
JDBC提供了一套和数据库交互的api

为什么使用JDBC

因为Java语言需要连接各种数据库(Oracle,mysql,db2。。。)为了避免Java程序员每一种数据库都学一套相关API,Java语言中提出了一个JDBC接口,让各个数据库遵循这个接口去写各自的实现类(驱动Driver),这样的话Java程序员只需要掌握JDBC接口方法的调用,就能够完成对各种数据库的操作

如何使用JDBC

  1. 创建maven工程
  2. 下载mysql相关jar包
    外网地址:maven.aliyun.com外网地址

    登录达内内网:maven.tedu.cn网站
    搜索mysql 找到5.1.6版本 复制坐标 粘贴到工程的pom.xml文件中 在project标签内 添加

3.创建JDBCHelloworld.java类

4.注册驱动
Class.forName("com.mysql.jdbc.Driver");
5.获取数据库连接对象

Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/db3", 
                    "root", 
                    "root");

6.获取sql语句执行对象

statement stat = conn.createStatement();

执行DDL

    boolean b = stat.execute(sql);

-execute方法可以执行任意sql
-返回值为true 表示有结果集
-返回值为false 表示没有结果集

执行DML insert delete update

int row = stat.executeUpdate(sql);

-返回值表示的是生效的行数

执行DQL select

ResultSet rs = stat.executeQuery(sql);

-rs表示查询的结果集
-next():把游标往下移动,如果下面有数据则返回true,没有数据则返回false
-见到ResultSet就一定是通过While循环进行遍历

从ResultSet中获取数据两种方式

-rs.getInt("字段名称");
-rs.getInt(index); //index表示字段的位置 index值从1开始 

-mysql类型的对应关系:
    Mysql             Java
    int              int
    varchar          String
    float/double     getFloat/getDouble
    datetime/timestamp getDate

ResultSet介绍

关闭资源

需要关闭的有Connection,statement,ResultSet
因为不管什么情况都需要把connection关闭所以需要把Conn的关闭写在finally里面

使用Mysql6.0以上版本需要注意以下2点

-注册的驱动类的地址多了个 cj

    com.mysql.cj.jdbc.Driver

-在连接数据库的url后面需要指定时区

    jdbc:mysql://localhost:3306/db3?serverTimezone=Asia/Shanghai

Junit测试

-在没有返回值的方法上面 添加 @Test 然后报错在错误提示中导入Junit相关jar包 然后此方法可以直接右键 runAs中执行

JDBC的封装

目的:通过代码复用,把重复出现的代码封装起来,提高开发效率

  1. 创建DBUtils类 声明两个方法 获取连接方法和关闭连接的方法
  2. 把获取连接相关的代码封装到DBUtils
  3. 把关闭连接相关代码封装到DBUtils

猜你喜欢

转载自www.cnblogs.com/author-huweidong/p/9210374.html