【知识碎片】1:建立索引,JSE基础细节

Linux

SSH远程登录的命令
ssh 域名 -p 端口号 -l 用户名

然后会提示输密码,输对就可以了。

错误输出的重定向
命令 2>文件名

如果不写2,或者写1,都属于标准输出的重定向。标准输出就如C++中的cout,错误输出就如C++中的cerr。

数据库

关系代数的知识

关系代数和关系型数据库有密不可分的联系,方便理解。关系运算有下面8种,前5种是基本关系运算(能推出其它的关系运算)。

[1]并:R∪S,需要两表列的结构一样,新表中的每个行是R或S中的行,即上下合并起来。

[2]差:R-S,是R中但不在S中的元素。

[3]积:即笛卡尔积,对于域的笛卡尔积

D1×D2×...×Dk={(d1,d2,...,dk)|diDi}D1×D2×...×Dk={(d1,d2,...,dk)|di∈Di}

即每个域里抽一个元素组成的元组。
关系的笛卡尔积
R×S={<rR,rS>}R×S={<rR,rS>}

即从R中取一行,S中取一行,拼成一个新的行,所有这些行组成的表。

[4]选择:从表中选出某些满足条件的行,是对表的单目运算,结果是和原表结构一样的表。

[5]投影:从表中挑出某些列构成表,自动把重复的行去掉。

[6]交:R∩S=R-(R-S)

[7]连接:根据某些条件将两表横向合并,如某一列相等的行拼起来。实际上是对笛卡尔积的结果做了清洗。

[8]除:老师没说,以后补充。

T-SQL在创建表时指明主外键和CHECK约束

写在创建的全部列之后。
主键约束:

PRIMARY KEY (非空列名)

外键约束:

FOREIGN KEY (外键表) REFERENCES 要引用的表名(对应的主键表)

CHECK约束:

CHECK(逻辑表达式)

例子↓

--建表

--院系    
CREATE TABLE D
    (
    yxh int NOT NULL,
    mc CHAR(20) NOT NULL,
    dz CHAR(20) NOT NULL,
    lxdh CHAR(10) NOT NULL
    PRIMARY KEY (yxh)
    );

--DROP TABLE dbo.D;

--教师
CREATE TABLE T
    (
    gh int NOT NULL,
    xm CHAR(20) NOT NULL,
    xb CHAR(2) NOT NULL,
    csrq DATE NOT NULL,
    xl CHAR(10) NOT NULL,
    jbgz NUMERIC(6,2) NOT NULL,
    yxh int NOT NULL,
    PRIMARY KEY (gh),
    FOREIGN KEY (yxh) REFERENCES D(yxh)
    );

--课程
CREATE TABLE C
    (
    kh CHAR(8) NOT NULL,
    km CHAR(16) NOT NULL,
    xf int NOT NULL,
    xs int NOT NULL,
    yxh int NOT NULL,
    PRIMARY KEY (kh),
    FOREIGN KEY (yxh) REFERENCES D(yxh)
    );

--学生
CREATE TABLE S
    (
    xh int NOT NULL,
    xm CHAR(10) NOT NULL,
    xb CHAR(2) NOT NULL,
    csrq DATE NOT NULL,
    jg CHAR(10) NOT NULL,
    sjhm CHAR(11) NOT NULL,
    yxh int NOT NULL
    PRIMARY KEY (xh),
    FOREIGN KEY (yxh) REFERENCES D(yxh)
    );

--开课表
CREATE TABLE O
    (
    xq CHAR(20) NOT NULL,
    kh CHAR(8) NOT NULL,
    gh int NOT NULL,
    sksj CHAR(16) NOT NULL,
    PRIMARY KEY (xq,kh,gh), --共同组成主键
    FOREIGN KEY (gh) REFERENCES T(gh),
    FOREIGN KEY (kh) REFERENCES C(kh)
    );

--DROP TABLE dbo.O;

--选课表
CREATE TABLE E
    (
    xh int NOT NULL,
    xq CHAR(20) NOT NULL,
    kh CHAR(8) NOT NULL,
    gh int NOT NULL,
    pscj int,
    kscj int,
    zpcj int
    PRIMARY KEY (xh,xq,kh,gh), --共同组成主键
    FOREIGN KEY (xh) REFERENCES S(xh),
    FOREIGN KEY (xq,kh,gh) REFERENCES O(xq,kh,gh),
    CHECK(pscj BETWEEN 1 and 100),
    CHECK(kscj BETWEEN 1 and 100),
    CHECK(zpcj BETWEEN 1 and 100)
    );
T-SQL的INSERT插入多行数据
INSERT INTO 表名
VALUES
(对应列值元组1),
(对应列值元组2),
...,
(对应列值元组n);

注意有些类型的数据,如浮点数和null,不能从字符串类型解析。
例子↓

--录数据

INSERT INTO dbo.D
VALUES('01','计算机学院','上大东校区三号楼','65347567'),
('02','通讯学院','上大东校区二号楼','65341234'),
('03','材料学院','上大东校区四号楼','65347890');

INSERT INTO dbo.T
VALUES
('0101','陈迪茂','男','1973-03-06','副教授',3567.00,'01'),
('0102','马小红','女','1972-12-08','讲师',2845.00,'01'),
('0201','张心颖','女','1960-01-05','教授',4200.00,'02'),
('0103','吴宝钢','男','1980-11-06','讲师',2554.00,'01');

INSERT INTO dbo.C
VALUES
('08305001','离散数学','4','40','01'),
('08305002','数据库原理','4','50','01'),
('08305003','数据结构','4','50','01'),
('08305004','系统结构','6','60','01'),
('08301001','分子物理学','4','40','03'),
('08302001','通信学','3','30','02');

INSERT INTO dbo.S
VALUES
('1101','李明','男','1993-03-06','上海','13613005486','02'),
('1102','刘晓明','男','1992-12-08','安徽','18913457890','01'),
('1103','张颖','女','1993-01-05','江苏','18826490423','01'),
('1104','刘晶晶','女','1994-11-06','上海','13331934111','01'),
('1105','刘成刚','男','1991-06-07','上海','18015872567','01'),
('1106','李二丽','女','1993-05-04','江苏','18107620945','01'),
('1107','张晓峰','男','1992-08-16','浙江','13912341078','01');

INSERT INTO dbo.O
VALUES
('2012-2013秋季','08305001','0103','星期三5-8'),
('2012-2013冬季','08305002','0101','星期三1-4'),
('2012-2013冬季','08305002','0102','星期三1-4'),
('2012-2013冬季','08305002','0103','星期三1-4'),
('2012-2013冬季','08305003','0102','星期五5-8'),
('2013-2014秋季','08305004','0101','星期二1-4'),
('2013-2014秋季','08305001','0102','星期一5-8'),
('2013-2014冬季','08302001','0201','星期一5-8');

INSERT INTO dbo.E
VALUES
('1101','2012-2013秋季','08305001','0103','60','60','60'),
('1102','2012-2013秋季','08305001','0103','87','87','87'),
('1102','2012-2013冬季','08305002','0101','82','82','82'),
('1102','2013-2014秋季','08305004','0101',null,null,null),
('1103','2012-2013秋季','08305001','0103','56','56','56'),
('1103','2012-2013冬季','08305002','0102','75','75','75'),
('1103','2012-2013冬季','08305003','0102','84','84','84'),
('1103','2013-2014秋季','08305001','0102',null,null,null),
('1103','2013-2014秋季','08305004','0101',null,null,null),
('1104','2012-2013秋季','08305001','0103','74','74','74'),
('1104','2013-2014冬季','08302001','0201',null,null,null),
('1106','2012-2013秋季','08305001','0103','85','85','85'),
('1106','2012-2013冬季','08305002','0103','66','66','66'),
('1107','2012-2013秋季','08305001','0103','90','90','90'),
('1107','2012-2013冬季','08305003','0102','79','79','79'),
('1107','2013-2014秋季','08305004','0101',null,null,null);
T-SQL建立索引

发现自己之前竟然没有看有关索引的东西,索引的详细知识和底层的实现后面要恶补一下。
例子↓

--创建索引

CREATE INDEX index1
ON S
    (
    yxh ASC,
    xh DESC
    );

CREATE INDEX index2
ON C
    (
    km ASC
    );

Java SE

JEE/JSE/JME的关系

这里写图片描述

JDK目录结构

这里写图片描述

三个环境变量的意义

[1]JAVA_HOME只是指明JDK目录的根目录,方便维护其它相关的环境变量。如果JDK目录变了,只要改JAVA_HOME,而不用去改那些引用了JAVA_HOME的环境变量。

[2]Path是cmd里敲入命令时,除了当前路径之外,还要去搜寻的路径。为了能在任何目录下使用编译器javac.exe和解释器java.exe,要把它们所在的bin目录放进Path。

[3]classpath是为了支持Java应用程序的,运行时所需的Java类库在\jre\lib\rt.jar中。

类和文件规则

源文件中可以有多个类,但只能有1或0个public类;如果有public类,那么源文件名需和此类名相同,否则需要和任一个类名相同,区分大小写。

临时设置环境变量

临时设置,在关闭cmd后就失效,如临时设置Path的值:

path D:\java\bin

往往不要丢掉Path之前的值,不然其它命令就不能用了:

path D:\java\bin;%path%
编写源文件要注意

如果不是在IDE里写的,保存的时候编码要选ANSI编码。

编译生成class文件

编译源文件会为其中的每个类单独生成一个class字节码文件,其名称与类名相同。

字节码兼容性

JDK1.6及其后的编译器生成的字节码不再向下兼容,即高版本JDK编译不能低版本JRE运行,编译时务必考虑用”-source”参数指定生成的字节码适合的最低Java平台,如:

javac -source 1.6 文件名.java

则生成的字节码可以在1.6及以上的JRE下运行。
-source的参数可以取不大于当前JDK的{1.6,1.7,1.8,6,7,8}中的一个。

运行入口

还是从有主方法的主类开始运行,所以应当进入主类字节码所在目录,然后解释器java后跟着主类名(必然有主类名.class文件,那就是解释器的工作开始之处)。

Java反编译

字节码不是机器码,更容易反编译,JDK提供的反编译工具是\bin\下的javap.exe,针对class文件使用:

javap 类名.class

当然还有其它的反编译软件。

代码风格

[1]Allmans风格:写C和C++时候这种风格的人多一些,就是左右大括号各自独占一行。适合代码量小。
[2]Kernighan风格:写Java的几乎都是这种风格,左大括号放在上一行末尾。适合代码量大。

标识符

即类名、方法名、变量名、类型名、数组名、文件名,要求不能是

{[0-9]*,Java关键字,true,false,null}

且只能用字母,下划线,$符和数字组成,区分大小写。

Java使用Unicode字符集

Unicode有65535个字符,其前128个字符和ASCII码同一。人类大部分语言的基本字符都在Unicode中,所以可以使用汉字、日文、韩文等。

整型数据

整型数据有四种,对int型和long型数据是有其常量表示的,如果开头是0表示八进制,如果开头是0x表示十六进制。long型常量用后缀L来和int型常量区分开。

byte和short型是没有常量表示的。

int型4字节,byte型1字节,short型2字节,long型8字节。它们都是有符号数,Java没有无符号的int/byte/short/long,这和C不同。

字符类型数据

前面说了,Java用的是Unicode,所以char占2个字节,即比如’A’和’好’占的都一样是2个字节。使用时还是要注意转义符。

Unicode表总归是有顺序的,可以用其顺序位置号的16进制转义表示该字符,如字符’A’和’a’即是

'\u0041''\u0061'
浮点类型数据

单精度float占4个字节内存,存储时保留8位有效数字;双精度double占8个字节内存,存储时保留16位有效数字。

它们都有常量表示,float型后面必须跟F或f;double型后面可以不跟,或者跟D或者d。

类型优先级

byte,short,char,int,long,float,double。从低到高自动隐式完成,从高到低需要强制类型转换。

Scanner
Scanner sc=new Scanner(System.in);

通过指定这个sc的next等方法来阻塞以读入对应类型的数据。

数组引用

直接输出数组时输出的是其引用,如果char型数组,输出的却是里面的字符,需要用空字符并置的方法输出其引用。

System.out.println(""+a);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值