美文网首页
第十篇学习总结

第十篇学习总结

作者: 拼搏男孩 | 来源:发表于2020-01-27 20:19 被阅读0次

第十篇学习总结

一、MySQL基本操作

1、数据库简介

1.1 简介

数据库是指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合,数据库管理系统指一种操作和管理数据库的大型软件。

1.2 常见数据库管理系统

Oracle、MySQL、DB2、Microsoft SQL Server、NoSQL、Redis、MongoDB

2、SQL语言

2.1 概述

SQL:Structure Query Language,SQL是一种标准语言,各个数据库厂商根据自己的需求做了改动。

2.2 SQL语句分类

  • DDL:数据库定义语言,用来定义数据库操作对象:库、表、列
  • DML:数据操作语言,用来定义数据库记录
  • DCL:数据控制语言,用来定义访问权限和安全级别
  • DQL:数据查询语言,用来查询记录

2.3 DDL

  • create database:创建数据库
  • drop database:删除数据库
  • show databases:显示当前MySQL中的数据库
  • alter database:修改数据库
  • create table:创建表
  • drop table:删除表
  • show dables:展示当前数据库中的所有表
  • alter table:删除表

2.4 DML操作

  • insert into 表名 (列名) values (列值):插入表
  • update 表名 set 列名=列值 where :修改操作
  • delete from 表名 where :删除记录

2、DQL数据查询

查询关键字:SELECT

语法:SELECT 列名 FROM 表名 【WHERE --> GROUP BY-->HAVING--> ORDER BY-->LIMIT】

2.1 简单查询

SELECT * FROM stu;//查询所有列
SELECT sname FROM stu;//查询指定列

2.2 条件查询

条件查询就是在查询时给出WHERE子句,在WHERE子句中进行条件筛选:

比较运算符:=、!=、<>、<、<=、>、>=;BETWEEN…AND; IN(set); IS NULL;

关系运算符:这里和Java中不同,直接使用英语单词:AND、OR、NOT

算术运算符:和Java中一样

2.3 模糊查询

模糊查询必须要搭配LIKE关键字,_代表一个字符,%代表任意个字符

2.4 字段控制字符

  • 去除重复记录:DISTINCT
  • IFNULL(comm,0):如果comm这列有null就为0
  • as:给列名起别名,可以省略

2.5 排序

ORDER BY 列名 ASC/DESC [,列名 ASC/DESC,...]

ASC代表顺序,DESC代表逆序,可以按照多列排序

2.6 聚合函数

  • COUNT():统计指定列不为NULL的记录行数
  • MAX():指定列的最大值
  • MIN():指定列的最小值
  • SUM():指定列的和
  • AVG():指定列的平均值

2.7 分组查询

GROUP BY子句

2.8 HAVING子句

使用分组查询如果还相对分组进行筛选就需要使用HAVING子句

having与where的区别

  • having是在分组后对数据进行过滤,where是在分组前对数据过滤
  • having后面可以使用分组函数,where后面不能使用分组函数

2.9 LIMIT限制

SELECT * FROM student LIMIT m,n;

m指的是起始行,起始行为0,n指的是查询多少行。

2.10 执行顺序

查询语句书写顺序:select 列 from 表 【where- group by- having- order by-limit】
查询语句执行顺序:from 表 where -group by -having - select - order by-limit

3、数据完整性

数据完整性可以分为实体完整性,域完整性、引用完整性,是为了保证用户输入的是正确的

3.1 实体完整性

  • 主键约束:非空且唯一 primary key(),可以单独设置一个,也可以设置联合主键。
  • 唯一约束:unique
  • 自动增长列:auto_increment

3.2 域完整性

也称为用户自定义的完整性:check约束、数据类型、not null约束、默认值约束

  • 数据类型:char、varchar、int、float、bigint、datetime、text、

3.3 引用完整性约束

又称为参照完整性约束,foreign key

4、多表查询

4.1 表与表之间的关系

现实生活中有:一对一、一对多、多对一、多对多的关系,多对多的关系可以分解为一对多的关系

4.2 合并结果集

  • UNION:去除重复记录
  • UNION ALL:不去除重复记录

4.3 连接查询

  • 笛卡尔积
  • 内连接:INNER JOIN ON,两张表中都满足条件的
  • 左外连接:LEFT OUTER JOIN ON,左表中满足条件和不满足条件的都显示出来
  • 右外连接:RIGHT OUTER JOIN ON,右表中满足条件和不满足条件的都显示出来

4.4 子查询

一个select语句中可以包含另一个完整的select语句,子查询出现的位置可以是WHERE后,也可以是from后,当子查询出现在where后作为条件时,可以使用any与all关键字。

二、单元测试

软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性

1、Junit单元测试

Junit是一个基于Java语言的单元测试框架,是白盒测试的一种.

  • 测试方法上必须使用@Test进行修饰
  • 测试方法必须使用public void 进行修饰,不能带任何参数
  • 将测试代码和项目业务代码分开
  • 测试类所在的包名应该和被测试类所在的包名保持一致
  • 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
  • 测试类使用Test作为类名的后缀(不是必须)
  • 测试方法使用test作为方法名的前缀(不是必须)

二、JDBC

1、简介

JDBC是一种用于执行SQL语句的Java API,通常JDBC体系结构由两层组成:JDBC与JDBC驱动程序

2、JDBC核心组件

  • DriverManager:管理数据库程序驱动列表
  • Driver:处理与数据库服务器的通信
  • Connection:具有用于连接数据库的所有方法
  • Statement:将SQL语句提交到数据库
  • ResultSet:用于保存从数据库检索的数据
  • SQLException:处理数据库一个用程序中发生的异常

3、JDBC相关的SQL语法

Create、Read、Update、Delete

4、JDBC初始

  • 使用步骤
    • 导入JDBC驱动包
    • 注册JDBC驱动程序
    • 创建连接
    • 执行查询
    • 从结果集中提取数据
    • 释放资源

5、JDBC执行SQL语句

有两个接口可供使用:Statement与PreparedStatement,下面以PreparedStatement来说明:

package com.qianfeng;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static String driver;
    private static String url;
    private static String userName;
    private static String password;
    //静态代码块,当类初始化的时候执行,并且仅执行一次,因为注册驱动只需要一次
    static{
        try {
            //从本地文件中读取配置信息
            Properties properties = new Properties();
            //获取当前类的根路径 , 读取配置文件
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

            properties.load(is);
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            userName = properties.getProperty("userName");
            password = properties.getProperty("password");
            //注册驱动
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {

        try {
            //获取连接
            Connection con = DriverManager.getConnection(url, userName, password);
            return con;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }
    public static void close(Statement st, Connection cn){

       close(null,st,cn);
    }
    public static void close(ResultSet rs, Statement st, Connection cn){
        //关闭连接
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(cn!=null){
            try {
                cn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

6、SQL注入

使用Statement容易引发SQL注入,泄露数据库信息.SQL注入指的是将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到七篇服务器执行恶意的SQL命令,所以最好的方法是使用PreparedStatement,这个类是继承自Statement.它有两个优点:预编译,效率高;安全,避免SQL注入.

JDBC中的所有参数都由?符号,这被称为参数标记。在执行SQL语句之前,必须为每个参数提供值。所述的setXXX()方法将值绑定到所述参数,其中XXX代表要绑定到输入参数的值的Java数据类型。如果忘记提供值,将收到一个SQLException。
每个参数标记由其顺序位置引用。第一个标记表示位置1,下一个位置2等等。该方法与Java数组索引不同,从0开始。

7、DBUtils工具类

由于每次和数据库通信都需要建立连接,写SQL语句,执行SQL语句,释放资源,所以将这些操作封装在一个单独的类中,提高代码的复用性,减少冗余代码.

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

public class DBUtils {
    //查找一条记录
    public static <E> E selectOne(Class<E> clazz, ResultSet rs){
        E obj = null;
        try{
            ResultSetMetaData metaData = rs.getMetaData();
            int cnum = metaData.getColumnCount();
            if(rs.next()){
                obj = clazz.newInstance();
                for (int i = 1; i <= cnum ; i++) {
                    String cname = metaData.getColumnLabel(i);
                    String ctn = metaData.getColumnTypeName(i);
                    Object value = rs.getObject(cname);
                    value = value==null&&("INTEGER".equals(ctn)||"DOUBLE".equals(ctn))?0:value;
                    Field field = clazz.getDeclaredField(cname);
                    field.setAccessible(true);
                    field.set(obj,value);
                }

            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return obj;
    }
    //查找多条记录
    public static <E> List<E> selectMore(Class<E> clazz, ResultSet rs){
        List<E> list = new ArrayList<>();
        try{
            ResultSetMetaData metaData = rs.getMetaData();
            int cnum = metaData.getColumnCount();
            while (rs.next()){
                E obj = clazz.newInstance();
                for (int i = 1; i <= cnum; i++) {
                    String cname = metaData.getColumnLabel(i);
                    String ctn = metaData.getColumnTypeName(i);
                    Object value = rs.getObject(cname);
                    value = value==null&&"INTEGER".equals(ctn)?0:value;
                    Field field = clazz.getDeclaredField(cname);
                    field.setAccessible(true);
                    field.set(obj,value);
                }
                list.add(obj);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        return list;
    }

}

相关文章

网友评论

      本文标题:第十篇学习总结

      本文链接:https://www.haomeiwen.com/subject/rfiethtx.html