java基础随笔10.16-10.22
List 转化String类型并去除[]123456789101112131415public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); String s = list.toString(); //把List<String>转成String System.out.println(s); String replace = s.replace("[", "").replace("]", ""); //去掉转成String之后的[] System.out.println(replace); // 第二种方法:使用hutool的工具方法strip,可以去 ...
Oracle的表分区
概述目的:提高大表的查询效率
概念:将一个表划分为多个分区表,”分而治之”
优缺点:
改善查询性能: 分区对象的查询仅搜索自己关系的分区
增强可用性: 如果某个分区出现故障,其它分区的数据仍然可用
维护方便 : 如果某个分区出现故障,仅修复该分区即可
均衡I/O: 将不同的分区放置不同的磁盘,以均衡 I/O,改善整个系统性能
缺点:已经存在的表无法直接转化为分区表(不过有很多间接方法,如:重定义表)
适用情况:表的大小超过 2GB
分类
无题
数据库Constraints(约束)什么是约束SQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句);或者在表创建之后规定(通过 ALTER TABLE 语句)。
语法CREATE TABLE + CONSTRAINT
1234567CREATE TABLE table_name(column_name1 data_type(size) constraint_name,column_name2 data_type(size) constraint_name,column_name3 data_type(size) constraint_name,....);
在SQL中,有以下6个约束
NOT NULL- 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值,独一无二的值。
PRIMARY KEY(主键) - NOT NULL和 UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY(外 ...
private static final long serialVersionUID = 1L
这句话的意思是定义程序序列化ID
什么是序列化
Serializable,Java的一个接口,用来完成java的序列化和反序列化操作的;
任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中
java序列化是指把java对象转换为字节序列的过程,而java反序列化是指把字节序列恢复为java对象的过程
序列化id (serialVersionUID)
序列化ID,相当于身份认证,主要用于程序的版本控制,保持不同版本的兼容性,在程序版本升级时避免程序报出版本不一致的错误。
如果定义了private static final long serialVersionUID = 1L,那么如果你忘记修改这个信息,而且你对这个类进行修改的话,这个类也能被进行反序列化,而且不会报错。一个简单的概括就是,如果你忘记修改,那么它是会版本向上兼容的。
如果没有定义一个名为serialVersionUID,类型为long的变量,Java序列化机制会进行隐式声明,即根据编译的class自动生成一个serialVers ...
select XX_seq.nextval from dual
j在业务中有一个需求,要求每次新增一条记录时,要在数据库创建一个对应的表,并且表名后缀为GROUPX,其中X为四位编号,从0001开始,每次创建都加一,这里需要考虑并发创建的情况,解决方案是oracle队列。
oracle队列是oracle提供的用于产生一系列唯一数字的数据库对象。
自动提供唯一的数值
共享对象
将序列值装入内存可以提高访问效率
主要用于提供主键值
创建队列首先当前用户要有创建序列的权限 create sequence 或 create any sequence
创建一个队列:
1234567CREATE SEQUENCE sequence # 创建序列名称 [INCREMENT BY n] # 递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1 [START WITH n] # 开始的值,递增默认是minvalue 递减是maxvalue [{MAXVALUE n | NOMAXVALUE}] # 最大值 [{MINVALUE n | NOMINVALU ...
成员变量和局部变量
本文参考自https://blog.csdn.net/YXXXYX/article/details/120126269
java变量分类
JVM中的主要内存空间
栈区
存放各种方法:静态方法、实例方法、构造方法等
存放局部变量
堆区存放new出来的对象(对象的实例)
方法区
存放各个类
静态变量在此初始化
三大变量内存分配情况
成员变量与局部变量
成员变量是在类中定义的变量
局部变量是在方法里定义的变量
成员变量成员变量包括静态变量与实例变量
静态变量:变量有static修饰,在类的准备阶段就存在了,生命周期一直到系统销毁这个类结束,静态变量的作用域与这个类的生存范围相同;
实例变量:没有static修饰,它从该类的实例被创建时就存在,直到系统销毁这个实例,实例变量的作用域与对应实例的生存范围相同;
静态变量访问方法:通过类名访问,不需要创建实例;
实例变量访问方法:通过实例访问,需要先new一个实例
12345678910111213141516public class MemoryShow { public static void main(String[ ...
sql语句的执行顺序以及流程
本文参考https://blog.csdn.net/weixin_44404350/article/details/116861936
一条Select语句完整的执行顺序:
fromfrom子句组装来自不同数据源的数据+(ON过滤器)或(JOIN 添加外部行);
FROM子句执行顺序为从后往前、从右到左。+(ON过滤器)或(JOIN 添加外部行)
wherewhere子句常用的查询条件如下所示:
查询条件
谓词
比较
=,<,>,<=,>=,!=,<>,!>,!<
确定范围
between…and…,not between…and…
确定集合
in,not in
字符匹配
like,not like
空值
is null,is not null
逻辑运算/多重条件
and,or,not
group bygroup by 子句将数据划分为多个分组;
把结果集按照某一列或者多列进行分组(值相等的一组)
123select gender,count(name) from student group ...
spring中的一些注解
@NotBlank、@NotEmpty和@NotNull@NotBlank只能用在String字符串类型上,而且调用trim()后,长度必须大于0(size>0)
@NotEmpty主要用在集合类上面,加了@NotEmpty的String类、Collection、Map、数组,是不能为null而且长度必须大于0
@NotNull不能为null,但可以为empty
1234567891011121314// @NotNull: false// @NotEmpty: false// @NotBlank: falseString name = null;// @NotNull: true// @NotEmpty: false// @NotBlank: falseString name = "";// @NotNull: true// @NotEmpty: true// @NotBlank: falseString name = " ";
三个注解都放在属性上,用来对属性值进行一定的限制
12@NotBlank(message = "ms ...
Select 1 from dual
Oracal里的select 1 from dual今天在看公司代码的时候,发现有这一句SQL:
1select 1 from dual
然后觉得有点奇怪,数据库里面都没有创建这个dual表,这个表是从何而来呢?
首先,公司用的是Oracle数据库,关于Oracle数据库中的dual表,官方文档说明(The DUAL Table):
DUAL是一个在数据字典里的很小的表,Oracle数据库和用户写的程序可以引用它来保证一个已知的结果。当一个值(比如当前date和time)有且仅需返回一次的时候,这个dual表还是很管用的。所有数据库用户都可以访问DUAL。
DUAL是一个随着Oracle数据库创建数据字典时自动创建的表。虽然DUAL在用户SYS模式下,但是还是可以被所有用户访问的。它有一列,DUMMY,定义为VARCHAR2(1),和包含一行数据,值为X。
对于用SELECT计算一个常量表达式来说,从DUAL选择是比较好用的。因为DUAL只有一行,所以常量只会返回一次。或者,你可以从任意一个表中选择常量、伪列和表达式,但是这个值将返回多次,次数和表的行数一样多。
1234SQL> ...
Oracle中rownum的使用与总结
本文参考https://blog.csdn.net/qq_45427600/article/details/113990657
rownum
伪列,顾名思义,是数据库自己创建出的字段
伴随着结果集的过程而生成的字段
比如select * from user where rownum < 5;或者select rownum rown, * from user where rownum < 5;就会查出伪列小于5的结果。
在执行这个sql的过程中,数据库会对查询出来的结果进行一一判断,先判断第一个结果,若满足where的条件,生成第一条结果然后加上他的伪列,伪列的默认值是1,从1开始,依次递增,如果第一条不满足,则丢弃。
所以产生一条规则:rownum不支持>,>=,between and,只支持<,<=等。尽管使用前者不会报错,但返回数据为空,因为根本无法满足where条件
1234如果是 where > 3那么取回第1条数据的rownum为1,不满足,就舍弃这条记录。看下一条,然后取第2条数据的rownum还是为1,还是不满足,再舍弃。以此类 ...