Java学习笔记(十一)-------网络、反射、MySQL数据库、JDBC和数据库连接池、正则表达式

目录

网络

网络通信

ip地址

域名

网络通信协议

TCP和UDP

InetAddress类

Socket

Tcp编程

 netstat指令

UDP网络编程(了解)

反射

反射机制

反射相关的主要类

反射的优缺点

反射调用优化

Class类

​编辑 Class类的常用方法

获取Class对象

有Class对象的类型

类加载

类加载三阶段

 类加载各阶段完成任务

​编辑 加载阶段

​编辑 连接阶段-验证

 连接阶段-准备

 连接阶段-解析

初始化阶段 

通过反射获取类的结构信息

通过反射创建对象

通过反射访问类中的成员

MySQL数据库

连接到数据库

​编辑数据库三层结构

 数据在数据库中的表示形式

SQL语句分类

创建数据库

查看、删除数据库

备份恢复数据库

创建表

Mysql常用的数据类型(列类型)

列类型-整形

数值型(bit)

数值型

字符串

字符串类型使用细节

日期类型

表的修改、创建、删除操作

数据库的CRUD语句

Insert语句

Insert语句使用细节

Update语句

Update语句使用细节

Delete语句

Delete使用细节

Select语句(重要)

合计/统计函数

count函数

sum函数

 avg函数

max和min函数

 ​编辑

group by函数

 字符串函数

数学函数

时间日期相关函数

加密函数

 流程控制函数

select查询加强

where语句

order by子句

分页查询

分组函数和分组子句

数据分组的使用顺序(多子句查询)

多表查询(重点)

多表查询--自链接

子查询

 all和any操作符

多列子查询

 ​编辑

表复制

合并查询

外连接

mysql约束

primary key(主键)

not null(非空)和unique(唯一)

foreign key(外键)

外键使用细节

check

​编辑 自增长

自增长的使用细节

索引

索引机制

索引的类型

索引的使用

使用索引的规则

​编辑mysql事务

​编辑

事务细节 

事务隔离级别

事务的ACID特性

表类型和存储引擎

主要的存储类型、表类型特点

视图(view)

视图的使用

视图细节

视图最佳实践

MySQL管理

mysql用户管理

​编辑 ​编辑

MySQL中的权限

​编辑给用户授权

MySQL管理细节

JDBC

JDBC基本介绍

JDBC原理示意图

​编辑JDBC概述

JDBC程序编写步骤

JDBC5种连接方式

​编辑

ResultSet(结果集)

Statement

SQL注入

​编辑

预处理

PreparedStatement

预处理的优点

预处理DML​编辑

JDBC工具类

事务

批处理

数据库连接池

C3P0l连接池 

Apache----DBUtils

BasicDao

正则表达式(RegExp)

正则表达式基本介绍

正则表达式语法

转义号

字符匹配符

选择匹配符

限定符

定位符

分组

正则表达式三个常用类

Pattern类

Matcher类

分组、捕获、反向引用


网络

网络通信

ip地址

域名

网络通信协议

TCP和UDP

InetAddress类

Socket

Tcp编程

当客户端连接到服务端后,实际上客户端也是通过一个端口和服务端进行通讯的,这个端口是TCP/IP来分配的,是不确定的,随机的。

// 客户端 , 上传字节流
public class testClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket(Inet4Address.getLocalHost(), 9999);
        System.out.println("客户端 socket返回="+socket.getClass());
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello,server".getBytes());
        outputStream.close();
        socket.close();
        System.out.println("客户端退出......");
    }
}
// 服务器端, 接受字节流
public class testServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端 在9999端口监听,等待连接......");
        Socket socket = serverSocket.accept();
        System.out.println("服务端 socket = "+socket.getClass());

        InputStream inputStream = socket.getInputStream();
        byte[] buf = new byte[1024];
        int readLen = 0;
        while((readLen = inputStream.read(buf)) != -1){
            System.out.println(new String(buf,0,readLen));
        }
        inputStream.close();
        socket.close();
        serverSocket.close();
        System.out.println("客户端退出...");
    }
}
// 客户端上传字符流,并接受服务端发送的字符流
public class testClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket(Inet4Address.getLocalHost(), 9999);
        System.out.println("客户端 socket返回="+socket.getClass());
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello,server".getBytes());

        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello , server ,字符流");

        bufferedWriter.newLine();
        bufferedWriter.flush();
        socket.shutdownOutput();

        InputStream inputStream = socket.getInputStream();


        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);


        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        System.out.println("客户端退出......");
    }
}
// 服务端接受客户端的字符流,并且向客户端发送字符流
public class testServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端 在9999端口监听,等待连接......");
        Socket socket = serverSocket.accept();
        System.out.println("服务端 socket = "+socket.getClass());

        InputStream inputStream = socket.getInputStream();


        // 输入字符流
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Hello,client".getBytes());

        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello , client , 字符流");
        bufferedWriter.newLine();
        bufferedWriter.flush();

        socket.shutdownOutput();

        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        serverSocket.close();
        System.out.println("服务端退出...");
    }
}

 netstat指令

UDP网络编程(了解)

// UDP通讯编程
public static void main(String[] args) throws IOException {
    DatagramSocket datagramSocket = new DatagramSocket(9999);// 准备在9999端口接受数据
    // 构建一个 DatagramPacket 对象,准备接受数据
    byte[] buf = new byte[1024];
    DatagramPacket datagramPacket = new DatagramPacket(buf,buf.length);

    datagramSocket.receive(datagramPacket);

    int length = datagramPacket.getLength();
    byte[] data = datagramPacket.getData();

    String s = new String(data, 0, length);
    System.out.println(s);


    data = "hello,client!".getBytes();
    datagramPacket = new DatagramPacket(data, data.length,
                    InetAddress.getByName("192.168.0.141"), 9900);

    datagramSocket.send(datagramPacket);



    datagramSocket.close();
}
// UDP通讯编程
public static void main(String[] args) throws IOException {
    DatagramSocket datagramSocket = new DatagramSocket(9900);// 准备在9900接口接受数据

    byte[] bytes = "hello , serve!".getBytes();
    DatagramPacket datagramPacket =
            new DatagramPacket(bytes, bytes.length,
                    InetAddress.getByName("192.168.0.141"), 9999);

    datagramSocket.send(datagramPacket);


    byte[] byteSend = new byte[1024];
    datagramPacket = new DatagramPacket(byteSend,byteSend.length);
    datagramSocket.receive(datagramPacket);

    int length = datagramPacket.getLength();
    byteSend = datagramPacket.getData();
    String s = new String(byteSend,0,length);
    System.out.println(s);


    datagramSocket.close();
}

反射

 

反射机制

反射相关的主要类

反射的优缺点

反射调用优化

Class类

 Class类的常用方法

 

获取Class对象

有Class对象的类型

 

类加载

类加载三阶段

 类加载各阶段完成任务
 加载阶段
 连接阶段-验证

 连接阶段-准备

 连接阶段-解析

初始化阶段 

通过反射获取类的结构信息

通过反射创建对象

爆破:使用反射可以访问private构造器/属性/方法。

通过反射访问类中的成员

MySQL数据库

MySQL安装视频:B站韩顺平

在cmd管理员模式下:

1.启动数据库:net start mysql

2.停止数据库:net stop mysql

3.进入mysql管理终端:mysql -u root -p (-u:代表用户。-p代表密码。当前root用户密码为空)

4.修改密码:

(1)use mysql;  (这里分号必须有)

(2)update user set authentication_string=password('111')where user='root' and Host='localhost'; (这里分号也必须要有)

(3)flush privileges;   (刷新权限,分号也必须要有)

5.删除安装好的mysql服务:sc delete mysql(慎用)

连接到数据库

数据库三层结构

 数据在数据库中的表示形式

SQL语句分类

创建数据库

创建数据库、表的时候,为了规避关键字,可以使用反引号解决

例如:创建名称叫DROP的数据表

CREATE DATABASE 'DROP';

查看、删除数据库

备份恢复数据库

恢复数据库:也可以复制数据库的内容,复制到SQLyog新查询编辑器。然后全选运行

创建表

注意:这里的  ` `  :代表的是英文半角模式下左上角波浪键。不是单引号。

Mysql常用的数据类型(列类型)

列类型-整形

数值型(bit)

数值型

字符串

字符串类型使用细节

日期类型

表的修改、创建、删除操作

数据库的CRUD语句

Insert语句

Insert语句使用细节

Update语句

Update语句使用细节

Delete语句

Delete使用细节

Select语句(重要)

合计/统计函数
count函数

sum函数

sum函数仅对数值起作用。对多列求和“,”不能少。

 avg函数

max和min函数
 

group by函数

 字符串函数

数学函数

时间日期相关函数

在mysql中,日期类型可以直接比较。但是需要注意格式。

例如:'2023-11-06' > '1998-01-01'

加密函数

 流程控制函数

判断是否为空‘is‘例如:colm is null

select查询加强
where语句

order by子句

分页查询

分组函数和分组子句

数据分组的使用顺序(多子句查询)

多表查询(重点)

多表查询是指基于两个和两个以上的表查询。

多表查询--自链接

自连接是指在同一张表的连接查询(将同一张表看做两张表)。

子查询

mysql中判断是否相等用“=”。判断不相等用“!=”或者“<>”。

 all和any操作符

多列子查询
 
表复制

合并查询

外连接

mysql约束

primary key(主键)

主键使用细节:

主键不能重复且不能为null。

一张表只能有一个主键,但可以是复合主键。

主键的指定方式:

使用“DESC 表名”可以查看主键。

not null(非空)和unique(唯一)

foreign key(外键)

外键使用细节

check
 自增长

自增长的使用细节

索引

索引机制

索引的类型

索引的使用

使用索引的规则

mysql事务

事务细节 

事务隔离级别

事务的ACID特性

表类型和存储引擎

主要的存储类型、表类型特点

视图(view)

视图的使用

视图细节

视图最佳实践

MySQL管理

mysql用户管理

MySQL中的权限
给用户授权

 

MySQL管理细节

JDBC

JDBC基本介绍

JDBC原理示意图

JDBC概述

JDBC程序编写步骤

 

JDBC5种连接方式

方式1:直接使用com.mysql.jdbc.Driver()。属于静态加载,灵活性差,依赖强。

方式2:

方式3:

方式4:(推荐使用

方式5:(添加配置文件,让连接mysql更加灵活)

ResultSet(结果集)

Statement

SQL注入

因为1 = 1恒成立。所以数据库就被注入了。

预处理

PreparedStatement

预处理的优点

预处理DML

JDBC API

JDBC工具类

在jdbc操作中,获取连接和释放资源是经常使用到的,可以将其封装JDBC连接的工具类JDBCUtils(JDBC工具类)。

事务

批处理

数据库连接池

C3P0l连接池 

方式一:

方式二:使用配置文件模板来完成

c3p0.config.xml内容

Druid(德鲁伊)连接池

配置文件druid.properties

使用方法

Apache----DBUtils

BasicDao

正则表达式(RegExp)

正则表达式是对字符串执行模型匹配的技术。

正则表达式基本介绍

正则表达式语法

转义号

字符匹配符

选择匹配符

限定符

java默认贪婪匹配,优先匹配次数多的。如果后面加上“”就为非贪婪匹配。

定位符

分组

正则表达式三个常用类

Pattern类

Matcher类

分组、捕获、反向引用

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值