您正在查看:标签 JAVA 下的文章

今日总结:JDBC入门、JDBC工具类、JDBC控制事务

今日内容

  • JDBC概念、入门
  • JDBC工具类
  • JDBC控制事务

1 JDBC

1.1 什么是JDBC

  • JDBC规范定义接口,具体的实现由各大数据库厂商来实现。
  • JDBC是Java访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用JDBC接口中的方法即可,数据库驱动由数据库厂商提供。

1.2 使用JDBC的好处

  • 程序员如果要开发访问数据库的程序,只需要会调用JDBC接口中的方法即可,不用关注类是如何实现的。
  • 使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库

1.3 快速入门

  • 步骤:
  1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar

    1. 复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
    2. 右键-->Add As Library
  2. 注册驱动
  3. 获取数据库连接对象 Connection
  4. 定义sql语句
  5. 获取执行sql语句的对象 Statement
  6. 执行sql,接受返回结果
  7. 处理结果
  8. 释放资源

- 阅读剩余部分 -

今日总结:多表查询、事务、DCL语句

今日内容

  • 多表查询
  • 事务
  • DCL语句

1 多表查询

  • 查询语法
select
      列名列表
from
      表名列表
where....
  • 笛卡尔积:

    • 有两个集合A、B,取这两个集合的所有组成情况。
    • 要完成多表查询,需要消除无用的数据

1.1 内连接查询

1.隐式内连接:使用where条件消除无用数据
  • 语法:
2.显式内连接
  • 语法:
select 字段列表 from 表名1 [inner] join 表名2 on 条件
例如:
SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;    
SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;    -- inner 可省略
3.内连接小结:查询步骤
  1. 确定查询哪些表
  2. 确定表连接的条件
  3. 确定查询的条件
  4. 确定查询的字段

- 阅读剩余部分 -

今日学习总结:DQL查询、约束、多表之间关系、范式、数据库备份

今日学习内容

  1. DQL查询语句

    1. 排序查询
    2. 聚合函数
    3. 分组查询
    4. 分页查询
  2. 约束
  3. 多表之间的关系
  4. 范式
  5. 数据库的备份和还原

1 DQL 查询语句

1.1 排序查询

  • 语法:order by 子句

    -- 通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
    SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
    ASC: 升序,默认值
    DESC: 降序
    
    eg:
    -- 查询所有数据,使用年龄降序排序
    SELECT * FROM student ORDER BY age DESC;
    
    -- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
    SELECT * FROM student ORDER BY age DESC, math ASC;
  • 注意:

    • 如果有多个排序条件,第1个条件相等时,按第2个条件进行排序,依次类推

- 阅读剩余部分 -

今日学习总结:数据库基本概念、MySQL数据库、SQL语句

今日学习内容

  • 数据库基本概念
  • MySQL数据库软件
  • SQL语句

1 数据库基本概念

1.1 数据的储存方式

储存位置优点缺点
内存速度快数据是临时状态,不能永久保存
文件数据可以永久保存操作数据不方便
数据库1) 数据可以永久保存
2) 查询速度快
3) 对数据的管理方便
占用资源,需要购买

1.2 什么是数据库?

  • 数据库 是用于存取和管理数据的仓库
  • 数据库 英文单词:DataBase 简称:DB
  • 数据库本质上是一个文件系统,数据还是以文件的方式存在服务器的电脑上的

1.3 数据库的特点

  • 持久化的储存数据,其实数据库本质上就是一个文件系统
  • 可以方便的进行数据的存取和管理
  • 使用了统一的方式对数据进行存取和管理,就是SQL语句

    • SQL语句:DBMS DataBase Management System

1.4 常见的数据库管理软件

  • Oracle:Oracle公司的,收费,大型的数据库
  • MySQL:Oracle公司的,6.x之前是免费的,之后是收费的,小型的数据库
  • SQL Server:微软公司,收费,大型的数据库,C#,.net语言中使用较多
  • DB2:IBM公司的,收费,大型的数据库,多用于银行系统
  • Java常用的数据库有:Oracle、MySQL

- 阅读剩余部分 -

今日学习总结:Junit单元测试、反射、注解

今日学习内容

  • Junit单元测试
  • 反射
  • 注解

1 Junit单元测试

  • @Test注解

    • 它不是JDK提供的注解,是Junit提供的,所以要将Junit的依赖先导入到模块中才可以使用
    • @Test注解是加在方法之上的
1.1 测试分类
  • 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
  • 白盒测试:需要写代码的。关注程序具体的执行流程。
1.2 Junit使用:白盒测试
* 步骤:
    1. 定义一个测试类(测试用例)
        * 建议:
            * 测试类名:被测试的类名Test CalculatorTest
            * 包名:xxx.xxx.xx.test cn.itcast.test

    2. 定义测试方法:可以独立运行
        * 建议:
            * 方法名:test测试的方法名 testAdd()  
            * 返回值:void
            * 参数列表:空参

    3. 给方法加@Test
    4. 导入junit依赖环境

* 判定结果:
    * 红色:失败
    * 绿色:成功
    * 一般我们会使用断言操作来处理结果
        * Assert.assertEquals(期望的结果,运算的结果);

* 补充:
    * @Before:
        * 修饰的方法会在测试方法之前被自动执行
    * @After:
        * 修饰的方法会在测试方法执行之后自动被执行

- 阅读剩余部分 -

今日学习总结:函数式接口、Stream流

今日学习总结

  • 函数式接口
  • Stream流

1 函数式接口

  • 概念

    有且仅有一个抽象方法的接口

  • 如何检测一个接口是不是函数式接口

    @FunctionalInterface

    放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败

  • 注意事项

    我们自己定义函数式接口的时候,@FunctionalInterface是可选的,就算我不写这个注解,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解

1.1 常用函数式接口之Supplier

  • Supplier接口

    Supplier接口也被称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据供我们使用。

  • 常用方法

    只有一个无参的方法

    方法名说明
    T get()按照某种实现逻辑(由Lambda表达式实现)返回一个数据
  • 代码演示

    public class SupplierDemo {
        public static void main(String[] args) {
    
            String s = getString(() -> "林青霞");
            System.out.println(s);
            
            Integer i = getInteger(() -> 30);
            System.out.println(i);
        }
    
        //定义一个方法,返回一个整数数据
        private static Integer getInteger(Supplier<Integer> sup) {
            return sup.get();
        }
    
        //定义一个方法,返回一个字符串数据
        private static String getString(Supplier<String> sup) {
            return sup.get();
        }
    
    }

- 阅读剩余部分 -

今日学习总结:函数编程、Lambda表达式、接口更新、方法引用

今日学习内容

  • 函数编程
  • Lambda表达式
  • 接口更新
  • 方法引用

1 函数编程

  • 函数式编程思想概述

    函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”

    Lambda表达式就是函数式思想的体现

2 Lambda表达式

  • 用于简化匿名内部类
  • 也可以把Lambda表达式看成是接口的实现类对象

2.1 Lambda表达式的标准格式

  • 标准格式:

    ​ (形式参数) -> {代码块}

    • 形式参数:接口中抽象方法的参数列表,如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
    • ->:由英文中画线和大于符号组成,固定写法。代表指向动作,表示参数传递
  • 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容,实现了抽象方法之后的方法体
  • 组成Lambda表达式的三要素:

    • 形式参数,箭头,代码块
  • Lambda表达式的使用前提

    • 一个接口中有且只有一个抽象方法,这种接口称之为函数式接口,可以通过一个注解来验证:@FunctionalInterface
  • 接口中有且仅有一个抽象方法

- 阅读剩余部分 -

今日学习总结:网络编程

今日学习内容

  • 网络编程

    • 网络编程的三要素
    • UDP编程
    • TCP编程

1 网络编程(Socket)

  • 编写的程序可以在实现了网络互联的不同地理位置的计算机之间进行数据的交换。

1.1 网络编程概述

  • 计算机网络

    是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

  • 网络编程

    在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换

- 阅读剩余部分 -

今日学习总结:多线程和线程同步

今日学习内容

  • 实现多线程
  • 线程同步
  • 生产者与消费者案例

1 实现多线程

1.1 进程和线程

  • 进程:是正在运行的程序

    ​ 是系统进行资源分配和调用的独立单位

    ​ 每一个进程都有它自己的内存空间和系统资源

  • 线程:是进程中的单个顺序控制流,是进程中的一条执行路径

    ​ 单线程:一个进程如果只有一条执行路径,则称为单线程程序

    ​ 多线程:一个进程如果有多条执行路径,则称为多线程程序

  • 如果一个进程一个线程都没有,则该进程也会随之结束

1.2 实现多线程的两种方式

- 阅读剩余部分 -

今日学习总结:其他流、Properties集合

今日学习内容

  • 其他流

    • 标准输入输出流
    • 打印流
    • 对象序列化流
  • Properties集合

1 IO特殊操作流

1.1 标准输入输出流

  • System类中有两个静态的成员变量

    • public static final InputStream in:标准输入流。通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源,默认指向的是键盘,从键盘读取数据,可以改变其指向
    • public static final PrintStream out:标准输出流。通常该流对应于显示输出或由主机环境或用户指定的另一个输出目标,默认指向的是控制台,将数据输出到控制台,可以改变其指向
  • 输出语句的本质:是一个标准的输出流

    • PrintStream ps = System.out;
    • PrintStream类有的方法,System.out都可以使用

- 阅读剩余部分 -

  1. 1
  2. 2