Java第十五课

  • 1 MySQL数据库基础2
    • 1.1 回顾:
      • 1.1.1 数据库的基础概念:
      • 1.1.2 数据库软件的安装:
      • 1.1.3 数据库软件的操作:
      • 1.1.4 常见的SQL(结构化查询语言)
      • 1.1.5 作业讲解:
    • 1.2 数据完整性总结:
    • 1.3 查询语句:
      • 1.3.1 基本的查询:
      • 1.3.2 带条件的查询
      • 1.3.3 排序:
      • 1.3.4 分组[用来做统计]
      • 1.3.5 分页 :
      • 1.3.7 表联接查询:
      • 1.3.8 课堂练习:
      • 1.3.9 模糊查询
      • 1.3.10 正则使用
      • 1.3.11 课堂练习:
    • 1.4 JDBC简介:
    • 1.5 JDBC案例:
      • 1.5.1 如果sql语句有参数
    • 1.6 Java.SQL的API介绍:
      • 1.6.1 1 Connection :
      • 1.6.2 DriverManager:
      • 1.6.3 PreparedStatement
      • 1.6.4 小结
    • 1.7 修改成我们HashMap:
    • 1.8 总结:
    • 1.9 作业布置:

1 MySQL数据库基础2

1.1 回顾:

1.1.1 数据库的基础概念:

数据库(简单理解为是数据存储的基本容器),数据库管理系统(MySQL Oracle DB2 SQLServer 内存数据库),表(表是数据库下一个对象,实际的数据存储的位置)

表一行: 认为是一个实体,记录;
每一个列: 属性,域

1.1.2 数据库软件的安装:

3306/用户名密码/编码设置 ;
Mysql安装完成,会生成一个服务;

1.1.3 数据库软件的操作:

建立数据库,建立表: 设计表的结构(比较重要)

1.1.4 常见的SQL(结构化查询语言)

可能包含了很多其他的部分:
DDL :数据定义语言
创建数据库,创建表;

–创建数据库语法
mysql> create database mydb;
Query OK, 1 row affected (0.01 sec)

–创建表
mysql> create table student(sId int auto_increment primary key,sName varchar(20)
not null,sAddress varchar(20));
Query OK, 0 rows affected (0.11 sec)

—删除表
mysql> drop table student;
Query OK, 0 rows affected (0.05 sec)

–删除数据库
mysql> drop database mydb;
Query OK, 0 rows affected (0.13 sec)

DML: 数据操作语言

增加 :
Insert into 表名(列名列表) values(值列表)
注意: 列名列表和值列表要匹配(个数,类型要匹配) ;列名的列表时可以省略的(默认是表中的所有列来插入);
如果某个列自动增长的,可以插入,也可以不插入(值为null ,或者这个列省略不写)
Java第十五课_第1张图片
这里写图片描述
删除:
删除的是表中的行;
Delete from 表 [where 条件] [] 表示可选

Java第十五课_第2张图片
如果不加条件删除的是表中的所有行;(注意 如果没有外键的依赖关系的话)
Java第十五课_第3张图片
Truncate table 表名 ; 删除表 [delete from 表]
这里写图片描述
修改:
Update 表 set 列=值,列2=值 [where 条件]

查询:
Select 列名 as 显示名,列名 显示名 from 表 [where 条件]

1.1.5 作业讲解:

1) 回去将早上那个Emp的案例使用HahsMap完成;
2) 回去设计表:

商品类型表(父表): goodsType
列名 类型 说明
typeId Int 商品类型编号,主键,自动增长
typeName Varchar(20) 商品类型,不能为空
TypeRemark Varchar(200) 类型的描述

商品表(子表): goods
列名 类型 说明
goodsId Int 商品编号,主键,自动增长
goodsName Varchar(20) 商品名称,不能为空
goodsPrice Double 价格
goodsCount Int 数量
TypeId Int 商品类型ID关联type表typeId
goodsDate Datetime 上架时间
3) 使用crud语句完成向表(3)插入 删除 修改 查询操作

-- 1 插入 分别向goodType和goods表中插入一条记录

insert into goodstype values(null,'休闲小零食','好吃呀~')
insert into goods values(null,'辣条',2,1,10000,'2018-03-03')
insert into goods values(null,'辣鸡',20,1,10,'2018-03-03');
insert into goods values(null,'醉鹅',200,1,1,'2018-03-03');
insert into goods values(null,'拌面',5.6,1,10000,'2018-03-03');

select * from goodstype;
select * from goods;

-- 2 修改 将商品类型为编号为1 和[and or]2的商品价格统一修改为25

update goods set goodsprice = 25 where typeId =1 or typeId=2; 

update goods set goodsprice = 25 where typeId in (1,2); 

-- 3 删除 将商品名字中(包含) '辣条' 的记录删除

-- 模糊查询 like
delete from goods where goodsName like '%辣条%'

-- 4 查询 查询价格最高的那个商品,显示其名称和价格

--order by 排序
select goodsName,goodsPrice from goods ORDER BY goodsprice [ASC] -- 默认升序

select goodsName,goodsPrice from goods ORDER BY goodsprice DESC  -- 降序
--  select top 1 是SQLServer中的语法 mysql不支持
-- 解法1
select  goodsName,goodsPrice from goods ORDER BY goodsprice DESC  limit 1

-- 解法2
-- max(列)

-- 这种写法是错误的 
select  goodsName,max(goodsPrice) from goods
-- 将
select  goodsName from goods
select  max(goodsPrice) from goods

-- 使用max的正确写法 
-- 先得到max
select  max(goodsPrice) from goods
-- 将max的结果作为另外一个查询的条件  --子查询
select  goodsName,goodsPrice from goods where goodsPrice =(select  max(goodsPrice) from goods)

-- 5 联接查询 显示结果类似如下: 
商品名称  商品类型
 辣条      休闲小零食

-- 内联接 INNER JOIN

select goods.goodsName as 商品名称,goodstype.typeName as 商品类型
from goods inner JOIN goodstype
on goods.typeId = goodstype.typeId

-- 可以使用where
select goods.goodsName as 商品名称,goodstype.typeName as 商品类型
from goods , goodstype
where goods.typeId = goodstype.typeId

1.2 数据完整性总结:

希望表中存储的数据是正确的,有意义的,完整地;

完整性约束 实现
实体完整性约束 主键,自动增长[唯一键]
域完整性约束(列 属性) 数据类型,是否为空,唯一,默认值等
参照完整性约束(引用完整性约束) 外键
其他完整性约束[登陆<->注册->要积分->会员等级不够->下载文件] 自定义一些规则,函数触发器等来实现
唯一键是可以为null,但是主键不能为空
Java第十五课_第4张图片

1.3 查询语句:

1.3.1 基本的查询:

Select 列名,列名 as 别名 from 表 [select * from … 尽量不要写]

1.3.2 带条件的查询

Select 列名,列名 as 别名 from 表 [where 条件]

1.3.3 排序:

Select 列名,列名 as 别名 from 表 [where 条件] [order by] 列名1,列名2 [asc/desc]

1.3.4 分组[用来做统计]

统计的函数: count(列名) 计数 /sum(列名)/avg(列名)/max(列名)/min(列名)
Select 列名,列名 as 别名 from 表 [group by] 列1,列2

Java第十五课_第5张图片
Java第十五课_第6张图片

1.3.5 分页 :

Select 列名,列名 as 别名 from 表 limit 参数1

Select 列名,列名 as 别名 from 表 limit 参数1,参数2

Java第十五课_第7张图片
Java第十五课_第8张图片
1.3.6 完整的查询:
Select 列名,列名
From 表
Where 条件
Group by 分组
Having 条件 –分组之后的筛选
Order by 列 [asc /desc]

1.3.7 表联接查询:

可以使用冒号来定义表格的对齐方式,如下:

类型 语法 备注
内联接 Inner join 得到的是两(多)张表的公共数据 略(见昨天的笔记和视频)
外联接(左) Left join 得到左表的所有数据,右表中如果没有对应的数据,则显示为null
外联接(右) Right join 得到的是右表中的所有数据,左侧表中如果没有对应,则显
交叉联接 Cross Join Cross Join 笛卡尔积

Java第十五课_第9张图片

1.3.8 课堂练习:

1) 自己去熟悉一下刚刚的查询操作;
2) 设计一个新的数据库和表: 用户的注册和登录操作(sql来模拟)
Java第十五课_第10张图片

1.3.9 模糊查询

检索某个范围的记录; 例如: 以“王%”开头的所有人;
通配符: % [] _ 等等
1) Like: 字符串比较多
Select 列 from 表 where 列 like ‘%王%’
2) Between … and: ( 列 > 值 and 列< 值)
某个范围 select 列 from 表 where 列 between 值1 and 值2 (值1<值2) –可以使数字或者时间值

3) In (not in) : 列 = 值 or 列 =值
匹配小括号内的值
Select 列 from 表 where 列 in (值1,值2)
Select 列 from 表 where 列 = 值 or 列 =值

应用:批量删除很好用;

4) Exists (not exists)

Select 列 from 表 where exists (查询结果)
Java第十五课_第11张图片
某种程度上,我们的exists检索可以使用索引; in 使用的全表的扫描 ;所以通常意义上来说,我们的exists效率比较高;

5) 其他:
空 (NULL) is null ( is not null)和 “” 的查询(=’’ !=’’ <>’’):
Java第十五课_第12张图片

1.3.10 正则使用

正则是一种字符匹配一种方式; 比如要检索表中满足 (哪些用户名是a开头的? 哪些用户名是以m结尾的? ‘%m’ )
…. Like ‘%m’ 当然也可以使用如下的正则表达式实现
Select 列 from 表 where 列 regexp ‘正则基本语法
Java第十五课_第13张图片

1.3.11 课堂练习:

1) 设计一个网吧计费系统设计(用户表 计算机表 上机记录表),同时模拟添加(用户注册)用户,计算机(添加设备),用户上机,换机,下机操作,用sql完成.
2) 设计一个员工管理数据表: 员工表,部门表,模拟添加员工,开除员工,给员工加工资;
Java第十五课_第14张图片

1.4 JDBC简介:

Java + MySQL ; java的数据库连接技术;
Java第十五课_第15张图片
案例:OA平台的部门管理,部门添加,删除,修改,查询等;

1.5 JDBC案例:

操作步骤: 部门添加
1. 建立数据库和表; 插入测试数据
Java第十五课_第16张图片
2. 需要加入外部的mysql- ….jar包;
记得要添加到构建路径( build path)

Java第十五课_第17张图片
我们可以使用mysql-connector.jar 中的一些类(接口)和方法;

  1. Java代码中:
    完整代码:
/**
 * 增加操作的代码
 * @author Administrator
 *
 */
public class TestAddDept {
    public static void main(String[] args) throws SQLException {

        // 要连接到数据库的基本信息
        // String hostName = "localhost"; // 127.0.0.1 // 192.168.13.122
        // String port = "3306";

        // ① : 创建url user password
        String url = "jdbc:mysql://localhost:3306/companydb";
        String user = "root";
        String password = "root";

        // ② 建立一个连接
        // 两个对象 Connection DriverManager
        // url - jdbc:subprotocol:subname 形式的数据库 url
        Connection conn = DriverManager.getConnection(url, user, password);

        // 使用conn
        //System.out.println(conn);

        // 使用conn对象得到一个 执行sql语句的对象 statement/preparedstatement

        // ③ 编写sql语句  这里我们要操作MySQL数据库
        String sql = "insert into dept values(null,'开发部','挺好的')";


        //④  通过连接对象得到 PreparedStatement
        PreparedStatement pstmt = conn.prepareStatement(sql);

        //⑤  执行增删改 ,并处理结果
        int n = pstmt.executeUpdate();
        if (n > 0)
            System.out.println("增加成功");
        else
            System.out.println("增加失败");

        // ⑥ 释放资源
        if (null != pstmt)
            pstmt.close();

        //连接放在最后来释放
        if (null != conn)
            conn.close();

    }

}

1.5.1 如果sql语句有参数

Java第十五课_第18张图片

1.6 Java.SQL的API介绍:

1.6.1 1 Connection :

Java第十五课_第19张图片
Java第十五课_第20张图片
Java第十五课_第21张图片

1.6.2 DriverManager:

Java第十五课_第22张图片
Java第十五课_第23张图片

1.6.3 PreparedStatement

Java第十五课_第24张图片
Java第十五课_第25张图片
Java第十五课_第26张图片

1.6.4 小结

Java第十五课_第27张图片

1.7 修改成我们HashMap:

1.8 总结:

  1. 数据库的SQL语句: 查询
  2. JDBC 常见对象 ,对象的方法(多练习 多看API文档)
  3. 如何java+Mysql(增加)

1.9 作业布置:

3) 设计一个网吧计费系统设计(用户表 计算机表 上机记录表),同时模拟添加(用户注册)用户,计算机(添加设备),用户上机,换机,下机操作,用sql完成. [电子版作业发我邮箱]
[email protected] . sql文件 (周天晚上)
4) 回去完成 员工的添加,删除,修改操作; 从控制台输入进来;
5) 回去预习 查询的操作;

你可能感兴趣的:(JavaSE)