jdbc学习笔记01
回顾:
day01-03,在上一篇文章文末
day04:
- 分组 group by
统计每个部门的平均工资:
select deptno,avg(sal) from
emp group by deptno;
统计每个部门下每个领导下员工的最高工资
select deptno,mgr,max(sal)
from emp group by deptno,mgr; - 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;
索引
索引分为两种:
- 聚集索引: 主键所创建的索引称为聚集索引,id对应着表内的数据
非聚集索引:非主键字段创建的索引称为非聚集索引,索引里面保持的数据是主键的值
索引原理:如果一张表添加了主键 会自动创建聚集索引,里面保存这主键和数据的对于关系,如果创建一个非主键字段的索引(如: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约束 没用
事务
四大特性
- 原子性
- 一致性
- 隔离性
- 持久性
JDBC
什么是JDBC
Java DataBase Connectivity
java数据库连接
JDBC提供了一套和数据库交互的api
为什么使用JDBC
因为Java语言需要连接各种数据库(Oracle,mysql,db2。。。)为了避免Java程序员每一种数据库都学一套相关API,Java语言中提出了一个JDBC接口,让各个数据库遵循这个接口去写各自的实现类(驱动Driver),这样的话Java程序员只需要掌握JDBC接口方法的调用,就能够完成对各种数据库的操作
如何使用JDBC
- 创建maven工程
下载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的封装
目的:通过代码复用,把重复出现的代码封装起来,提高开发效率
- 创建DBUtils类 声明两个方法 获取连接方法和关闭连接的方法
- 把获取连接相关的代码封装到DBUtils
- 把关闭连接相关代码封装到DBUtils
jdbc学习笔记01的更多相关文章
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- JDBC 学习笔记(十一)—— JDBC 的事务支持
1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...
- JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架
1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...
- JDBC 学习笔记(六)—— PreparedStatement
1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...
- JDBC学习笔记二
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
- JDBC学习笔记一
JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
- SaToken学习笔记-01
SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
随机推荐
- JavaScript运算符优先级——"++,--,&&,||“
上篇文章比较了"?,="三者的优先级:"?">"=">"," 今天继续学习"++,--,& ...
- http学习笔记(二):URL和资源
2.1浏览因特网资源 ------------总结:方案.主机.路径 方案:http,FTP,SMTP等 http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连 ...
- C#中StreamReader读取中文文本出现乱码的解决方法
在编写文本文件读写程序的过程中,有如下代码 StreamReader sr = new StreamReader(FileName); 结果发现打开中文文本文件出现乱码. 究其原因,原来自从Windo ...
- SQL DATEDIFF语法及时间函数 Sql 查询当天、本周、本月记录
SQL DATEDIFF语法及时间函数 Sql 查询当天.本周.本月记录 转:http://blog.csdn.net/Json1204/article/details/7863801?locatio ...
- dll托管于非托管
托管的DLL组件可以在VS 直接添加引用,在使用using dll的文件命名空间就可以使用 非托管的DLL组件,只能通过using system.Runtime.InteropServices:引入 ...
- Tiled 地图编辑器使用教程-官方demo
一.Tiled Map Editer 下载地址 http://www.mapeditor.org/download.html 二.官方教程查看 下载安装后,不管windows还是Mac系统都包含官方例 ...
- Visual Studio 2017 安装失败,你们有这样的问题吗?怎么解决
由于发生一个或多个包故障,产品未能安装列出的工作负荷和组件. 工作负荷不完整 使用 JavaScript 的移动开发 (Microsoft.VisualStudio.Workload.WebCross ...
- spring-boot学习之属性配置
通过@value注解,将配置文件中的内容引入
- 基于vue2+nuxt构建的高仿饿了么(2018版)
前言 高仿饿了么,以nuxt作为vue的服务端渲染,适合刚接触或者准备上vue ssr的同学参考和学习 项目地址如遇网络不佳,请移步国内镜像加速节点 效果演示 查看demo请戳这里(请用chrome手 ...
- GCC & Maker
All we did must depend on compiler, and then What we did can run on machine. What does compiler do b ...