JDBC和连接池
JDBC是为访问不同数据库提供的统一接口,为使用者屏蔽了细节问题。可以利用JDBC连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。
数据库连接方式连接数据库主要有2种方式
使用Class.forName自动完成注册驱动,直接连接数据库:
Class.forName(“com.mysql.cj.jdbc.Driver”);
Connection connection = DriverManager.getConnection(url, user, password); //其中的参数最好在使用时从文件中提取出来,方便修改
jdk1.5以后使用了jdbc4,不再需要显示调用Class.forName注册驱动,可以直接使用语句Connection connection = DriverManager.getConnection(url, info);连接数据库
在Java中输入SQL语句在连接建立后,如果需要对数据库进行访问,执行命名或者SQL语句,可以通过Statement、PreparedStatement、Calla ...
MySQL进阶篇
存储引擎存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,也可以被成为表类型。
创建表时可以指定存储引擎,在CREATE TABLE语句后面添加ENGINE=存储引擎名
查询数据库支持的存储引擎:SHOW ENGINES;
MySQL体系结构
MySQL的服务端是分层实现的:
连接层:接收客户端连接,完成安全处理,授权和校验权限等操作
服务层:核心部分,实现SQL接口,解析器,查询优化器,缓存等,所有跨存储引擎的功能也在这一层实现,如过程,函数等
引擎层:存储引擎负责MySQL中数据的存储和提取的方式,服务器通过API和存储引擎通信。不同的存储引擎有不同的功能
存储层:存储数据库数据
存储引擎特点InnoDBInnoDB是一种兼顾高可靠性和高性能的通用存储引擎,MySQL5.5之后默认的存储引擎为InnoDB
特点:
DML操作遵循ACID模型,支持事务
行级锁,提高并发访问性能
支持外键FOREIGN KEY约束,保证数据的完整性和正确性
文件:xxx.ibd,xxx表示表名,InnoDB每张表都会对应这样一个表空间文件,存储表 ...
MySQL基础篇
MySQL概述
名称
解释
简称
数据库
将数据有组织的存储的仓库
DataBase(DB)
数据库管理系统
操纵和管理数据库的大型软件
DBMS
SQL
操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准
Structured Query Language
工程师通过SQL操作DBMS,间接管理数据库中的数据
Oracle、MySQL等系统是关系型数据库管理系统,支持使用SQL语言进行数据库操作。
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
使用MySQL安装:这里推荐安装Mysql8版本,可以参考这篇文章安装MySQL
启动与停止:
net start mysql80
net stop mysql80
客户端连接:mysql [-h 127.0.0.1] [-P 3306] -u root -p
SQL
SQL语句可以单行或多行书写,以分号结尾
MySQL中的SQL语句不区分大小写,但是关键字推荐使用大写
注释:
单行注释:-- 注释内容或# 注释内容(MySQL特有)
多行注释:/*注释内容*/
SQL数 ...
java反射
反射利用反射机制,可以通过外部文件配置,在不修改源码的情况下控制程序,符合设计模型中OCP原则
反射机制允许程序在执行期间借助于ReflectionAPI取得任何类的内部信息(成员变量、构造器、成员方法等),并能操作对象的属性及方法。
加载类之后,在堆中产生了一个Class类型的对象,这个对象包括了类的完整结构信息。这个对象就像一面镜子,通过这个镜子看到类的结构,所以称之为:反射
反射可以做到的事:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时得到任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的成员变量和方法
生成动态代理
使用反射后,程序的执行速度会受到影响
反射相关的类常用的反射相关的类都在java.lang包中
Class:代表一个类,表示某个类加载后在堆中的对象
reflect.Method:类的方法
reflect.Field:类的成员变量,不能得到private属性
reflect.Constructor:构造器
Class类
Class类也是继承Object的类
Class类对象不是new出来的,而是系统创建的
对于某个 ...
Java网络编程基础
网络 大都是计算机网络的基础知识,这里仅复习一下重点概念。
IP地址=网络地址+主机地址
IPv4最大的问题在于网络地址资源有限,制约了互联网的应用与发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍
端口号用于标识计算机上某个特定的网络程序,范围是0~65535,其中0~1024已经被占用,当浏览器或程序要请求特定IP的某些服务时,需要使用IP地址+端口号的形式访问
常见的端口号:
ssh:22 ftp:21 smtp:25 http: 80
tomcat: 8080 mysql:3306 oracle:1521 sqlserver:1433
OSI七层模型是理论上的,并没有实际使用。主要使用的是TCP/IP模型四层模型,分为:应用层、传输层、网际层、网络接口层
TCP协议:
使用TCP前需要“三次握手”建立连接,形成传输数据通道,进行可靠传输
TCP协议进行通信的两个应用进程:客户端、服务端
在连接中可进行大数据量的传输
传输完毕需要释放已建立的连接,效率较低
UDP协议:
将数据、源、目的地封装成数据 ...
javaIO流
文件流 文件在程序中是以流的形式来操作的,文件保存在硬盘中,通过输入流被java程序读取,程序再通过输出流输出进文件中。流是数据在数据源和程序之间经历的路径,输入流是数据从数据源到程序的路径,输出流是程序到数据源的路径。
java.io包中提供了各种流类和接口,以获取不同种类的数据,并通过方法输入或输出数据。
流的分类
按照数据单位可以分为:字节流(8bit)、字符流
按照数据流向分为:输入流、输出流
按照流的角色不同分为:节点流、处理流/包装流
常用的文件操作
创建文件对象相关构造器和方法
new File(String pathname):根据路径创建文件对象
new File(File parent, String child):根据父目录文件+子路径构建
new File(String parent, String child):同上
获取文件相关信息
getName:获取文件名
getAbsolutePath:获取绝对路径
getParent:获取文件父目录
length:获取文件占用字节
exists:文件是否存在
isFile:是否为文件
isD ...
java多线程基础
在操作系统之上,可以同时运行很多个进程,并且每个进程之间相互隔离互不干扰。CPU会通过时间片轮转算法,为每一个进程分配时间片,并在时间片使用结束后切换下一个进程继续执行,通过这种方式来实现宏观上的多个程序同时运行。
由于每个进程都有一个自己的内存空间,进程之间的通信就变得非常麻烦(比如要共享某些数据)而且执行不同进程会产生上下文切换,非常耗时
后来,线程的概念被提出,一个进程可以有多个线程,线程是程序执行中一个单一的顺序控制流程,现在线程才是程序执行流的最小单元,各个线程之间共享程序的内存空间(也就是所在进程的内存空间),上下文切换速度也高于进程。
很多框架都在使用多线程,比如Tomcat服务器,所有用户的请求都是通过不同的线程来进行处理的,这样网站才可以同时响应多个用户的请求。
虽然多线程能够解决很多问题,但是,如何才能正确地使用多线程,如何才能将多线程的资源合理使用,这都是我们需要关心的问题。
在Jdk1.5的时候,新增了java.util.concurrent(JUC)包,其中包括大量用于多线程编程的工具类,目的是为了更好的支持高并发任务,让开发者进行多线程编程时减少竞争条件和死 ...
java集合
集合的好处之前保存多个数据的时候一直都是用的数组,但是数组
长度开始时必须指定,而且一旦指定,不能更改
保存的必须为同一类型的元素
使用数组进行增加/删除元素时比较麻烦
但是集合避免了这些缺点,可以动态保存任意多个对象。
常用的集合主要可以分为两类
单列集合Collection
List:ArrayList、LinkedList、Vector
Set:HashSet、TreeSet
双列集合Map:HashMap、TreeMap、Hashtable、Properties
CollectionCollection是一个接口,不可以实例化。该类提供了一些通用方法,供实现该接口的类使用。
size:集合中元素个数
isEmpty:检查集合是否为空
clear:清空集合
ListList实现了Collection接口,除了通用方法外,还含有:
add(i,b):把b元素添加到集合的i位置
addAll(i,b):从i位置开始,把b中所有元素添加进来
get(i):得到i位置上的元素
indexOf(a)/lastIndexOf(a):返回a在List中第一 ...
java常用类及其方法
包装类针对八种基本数据类型相应的引用类型,有了类的特点,就能调用类中的方法。
基本数据类型
包装类
boolean
Boolean
char
Character
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
装箱与拆箱 这两个过程的主要用途在于使得在需要使用对象的场景中能够使用基本数据类型,以及在需要使用基本数据类型的场景中能够使用对象。例如,在集合类中,只能存储对象而不能存储基本数据类型,因此需要通过装箱将基本数据类型转换为对应的包装类对象。
在jdk5之前,需要手动装箱与拆箱,jdk5及之后使用自动装箱与拆箱。
public class Test{ public static void main(String[] args){ int num = 100; // 手动装箱 Integer i = new Integer(num); Integer j = In ...
java基础入门(三)
枚举类使用方法
使用关键字enum代替class,默认会继承Enum类
public static final 类名 = new 类名(参数)直接使用类名(参数)代替,这种语法会默认调用该类的构造器,如果有无参构造器可以不填参数
如果有多个常量对象,使用,间隔
创建的对象放在枚举类的行首
Enum类不可在外部创建对象,因为其构造器为私有
常用方法
方法名
详细描述
valueOf
通过字符串找到叫该名字的枚举对象,如果没找到会报异常
toString
返回枚举对象的名称,通常会在枚举类中重写该方法
values
隐藏在枚举类中的方法,返回一个数组,含有全部定义的枚举对象
ordinal
输出该枚举对象的定义次序,从0开始编号
compareTo
比较两个枚举对象,按照定义次序比较,返回前面的枚举常量编号减去后面的枚举常量编号
注意事项
使用enum关键字后不能继承其他类(enum会隐式的继承Enum类)
枚举类的普通类一样可以实现接口
注解注解(Annotation)也叫做元数据(Metadata),用于解释包、类、方法、属性、构造器、局部变量等数据信 ...