Java系列进去Android之HTML与SQLite

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 初始位置,查询个数]

你可能感兴趣的:(Java系列进去Android之HTML与SQLite)