1 HTML&SQLiteN26
1.1 get和post请求
两者的区别:
【
1、 get提交将数据显示在地址栏,对于敏感信息不安全;post提交不显示在地址栏,对于敏感信息安全
2、 地址栏中存放的数据是有限,所以get方式对提交的数据体积有限制。post可以提交大体积数据
3、 对提交数据的封装方式不同《get:将提交数据封装到了http消息头的第一行,请求行中 post:将提交的数据封装到消息头后,在请求数据体中》
】
使用场景:
【
1、 如果说访问服务器数据,客户端不需要提交数据信息,只需要从服务器获取信息,那么通常使用get方式,例如:访问图片、音频等。。。
2、如果说访问服务器数据,客户端需要提交数据信息(用户名、密码...),通常会使用post方式,例如:注册、登陆等...
】
1.2 提交示例POST与GET
【
Inserttitle here
-->
action:服务器的地址
method:数据的提交方式,常用的有两种:get、post
-->
用户名:
密码:
publicclass Server {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args)throws IOException {
// TODO Auto-generated methodstub
//tcp服务端
ServerSocket serverSocket =new ServerSocket(6666);
Socket socket =serverSocket.accept();
InputStream is =socket.getInputStream();
byte[] buf = new byte[1024];
int length = is.read(buf);
System.out.println(newString(buf, 0, length));
serverSocket.close();
}
}
】
1.3 数据库
【
SQL Server 微软
Oracle
MySQL
SyBase
DB2
SQLite,弱类型的数据库
安全性、并发性、
简介:
是一款微型数据库,它用在嵌入式系统中,比如Android系统。它跟传统的数据库有比较大的差别。省略了大多数的功能,比如权限,管理、触发器、存储过程等。只保留对数据库最常用到的增删改查操作。(弱类型的数据库)。
DB(数据库)
DBMS(数据库管理系统):Database Management System
DBA: 数据库管理员
标准的SQL(结构化查询语言)
Ø 分类:
ü DDL(数据定义语言):创建库、创建表、删除库、删除表
ü DML(数据操作语言):插入、删除、修改数据
ü DQL(数据查询语言):数据查询语言
ü DCL(数据控制语言):创建用户、设置权限、撤销权限等。
Øsqlite数据库支持的数据类型(5种类型)
1) null 空
2) integer 整型
3) real 浮点型
4) text/varchar 字符串
5) blob 二进制
Øsqlite支持的约束条件
1) primarykey:主键约束,非空且唯一
每张表都应该设置一个主键,找不到合适的主键的话,可以添加一个自增长列(只能是整型)来作为表的主键。
一张表最多只能有一个主键
2) notnull:非空约束
3) unique:唯一约束,可以为空
4) check:检查约束
5) default:默认约束
6) foreignkey:外键约束
ü 主要用于维护引用的完整性(默认没有开启,要想使用必须手动开启)
ü 手动开启外键约束:PRAGMAforeign_keys = ON
ü 外键列的值必须在主键列中存在,否则就会出错。
ü 语法:字段名 数据类型 references表名(字段名)
删除表:drop table 表名;
l常用的指令
Ø .quit 退出
Ø .tables 查看数据库中所有表名
Ø.headers on/off显示/隐藏表头
Ø.schema表名查看表结构
Ø select * from 表名 查看指定表内的所有数据(一般用于测试)
数据库操作:select、insert、update、delete
插入:语法:insert into 表名 (字段列表) values(值列表);
实例:insert into stu (id,name,score,age,gender)values(1,’xiaohua’,60,20,’男’);
注意:主键如果是整型,那么就自动拥有自增长的特性。
==如给添加数据的时候是给所有的字段都赋值了话,那么字段列表可以省略不写。
Insert into stu values(5,’xiaohua’,60,20,’男’)
更新:语法:update 表名 set 字段名1 = ?,字段名2 = ?, ... [where 条件];
删除:语法:delete from 表名 [where 条件];
Delete from stu //表中的数据回全部删除
Deletefrom stu where id=3
查询:语法:select 列名1,列名2,...from 表名 [where 条件][group by 列名]
[having条件][order by列名 asc/desc][limit 初始位置,查询个数]
【
给列取别名:select id as 学号,name 姓名,score,age,gender from stu
//在给列取别名的时候,as可以省略不写。
//给表去别名
Selects.id,name from stu as s;
】
Ø多表查询
ü内联(inner join)
要求:把两张表中满足条件的记录拼成一条记录。
有两种写法:
1) selecti.name,i.age,i.gender,i.address,c.math,c.english from stu_info as i,stu_score cwherei.stuno=c.sno;
2) selecti.name,i.age,i.gender,i.address,c.math,c.english from stu_info as iinner joinstu_score as coni.stuno=c.sno;
【
】
ü外联(outer join)
1) 左外查询(left [outer] join)
以左表为基准表,先和右表做内联,接下来左表中匹配不到的记录也会拼成一条记录,只是值为null
selects.id,s.name,s.tid,t.name from stu s left join teacher t on s.tid=t.tid;
2) 右外查询(right [outer] join)
sqlite不支持
为表添加一列
alter table stu add tid integer;
ü交叉连接(cross join)
没有连接条件。
示例:
selecti.name,i.age,i.gender,i.address,c.math,c.english from stu_info as icross joinstu_score as c;
selects.id,s.name,s.tid,t.name from stu scross jointeacher t on s.tid=t.tid;
Ø按列来进行排序
selectname,age,gender,address from stu_infoorder by age asc;
selectname,age,gender,address from stu_infoorder by age desc;
selectname,age,gender,address from stu_info order by age desc,name desc;
以多个列来排序,先按age降序,再把age相同的记录按名字降序排序
获取指定个数的记录
要求:查询出班级中年龄最大的前三个学员的个人信息
selectname,age,address from stu_infoorder by age desc limit0,3;
Ø聚合函数
count(列名)、sum(列名)、max(列名)、min(列名),avg(列名)
在做查询语句的时候,我们不能使用列名和聚合函数一起查询,因为列查询出来的个数可能有多个,而聚合函数的结构只有一个,不能组成一张规则的表。
Select count(*)from stu; //计数求和
Ø分组查询
要求:打印输出班级中每个城市所对应的学生数。
select address,count(*) as 人数 from stu_info group by address order by 人数desc;
select count(*) from stu group by tidhavingtidis not null;
注意事项:
1) 在分组中使用聚合函数,聚合函数统计的不是表中的所有记录,而是统计每个组中的记录
2) 在分组查询中,分组的列可以和聚合函数一起查询
3) 可以以多个列进行分组。
select address,count(*)as 人数 from stu_info group by addresshaving 人数>1;
PS:where和 having的区别?
where在分组之前对表中所有的记录进行条件过滤,而having必须用在groupby 之后,主要用来对组进行设置过滤条件。
Where用于分组之前查询结果的筛选,而having是用于分组之后查询结果的筛选
Select tid,count(*) from stu where score >=60 group by tidhaving tid is not null;
Ø模糊查询
ü关键字: like
% : 代表任意多个字符(0到多)
_ : 代表任意一个字符(1)
Select * from stu where name like ‘x%’;
ü 示例:
a) 查询姓名中包含字母a的所有人
selectname,age,address from stu_info where name like '%a%';
b) 查询姓名中第二个字母为h的人员信息
selectname,age,address from stu_info where name like '_h%';
SQLite3
命令行软件
注意:不要直接双击打开sqlite3.exe,如果直接双击打开软件会将数据保存在内存的一块
Ctrl+c .quit .tables
//创建表
create table stu(
idinteger primary key, //主键约束 autoincrement 自增长功能
namevarchar(20) not null, //不能为空
ageinteger check(age>18),
socrereal unique, //唯一性约束
gendervarchar(2) default(‘男’) //默认值
);
//查询指定字段为空的记录
Select * from stu where tid is null; //is not null
Ø语法:select列名1,列名2,...from 表名 [where 条件][group by 列名]
[having条件][orderby列名 asc/desc][limit 初始位置,查询个数]
】