1? ? ? HTML&SQLiteN26
【
1、 get提交將數(shù)據(jù)顯示在地址欄脓斩,對(duì)于敏感信息不安全;post提交不顯示在地址欄,對(duì)于敏感信息安全
2分俯、 地址欄中存放的數(shù)據(jù)是有限,所以get方式對(duì)提交的數(shù)據(jù)體積有限制哆料。post可以提交大體積數(shù)據(jù)
3缸剪、 對(duì)提交數(shù)據(jù)的封裝方式不同《get:將提交數(shù)據(jù)封裝到了http消息頭的第一行,請(qǐng)求行中????? ??????????????????post:將提交的數(shù)據(jù)封裝到消息頭后东亦,在請(qǐng)求數(shù)據(jù)體中》
】
【
1杏节、 如果說訪問服務(wù)器數(shù)據(jù),客戶端不需要提交數(shù)據(jù)信息,只需要從服務(wù)器獲取信息奋渔,那么通常使用get方式镊逝,例如:訪問圖片、音頻等卒稳。蹋半。他巨。
2充坑、如果說訪問服務(wù)器數(shù)據(jù),客戶端需要提交數(shù)據(jù)信息(用戶名染突、密碼...)捻爷,通常會(huì)使用post方式,例如:注冊(cè)份企、登陸等...
】
【
Inserttitle here
-->
action:服務(wù)器的地址
method:數(shù)據(jù)的提交方式,常用的有兩種:get也榄、post
-->
用戶名:
密碼:
publicclass Server {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args)throws IOException {
// TODO Auto-generated methodstub
//tcp服務(wù)端
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();
}
}
】
【
SQL Server?微軟
Oracle
SyBase
DB2
SQLite,弱類型的數(shù)據(jù)庫
安全性、并發(fā)性司志、
簡(jiǎn)介:
是一款微型數(shù)據(jù)庫甜紫,它用在嵌入式系統(tǒng)中,比如Android系統(tǒng)骂远。它跟傳統(tǒng)的數(shù)據(jù)庫有比較大的差別囚霸。省略了大多數(shù)的功能,比如權(quán)限激才,管理拓型、觸發(fā)器、存儲(chǔ)過程等瘸恼。只保留對(duì)數(shù)據(jù)庫最常用到的增刪改查操作劣挫。(弱類型的數(shù)據(jù)庫)。
DB(數(shù)據(jù)庫)
DBMS(數(shù)據(jù)庫管理系統(tǒng)):Database Management System
DBA: 數(shù)據(jù)庫管理員
標(biāo)準(zhǔn)的SQL(結(jié)構(gòu)化查詢語言)
?? 分類:
ü? DDL(數(shù)據(jù)定義語言):創(chuàng)建庫东帅、創(chuàng)建表压固、刪除庫、刪除表
ü? DML(數(shù)據(jù)操作語言):插入靠闭、刪除帐我、修改數(shù)據(jù)
ü? DQL(數(shù)據(jù)查詢語言):數(shù)據(jù)查詢語言
ü? DCL(數(shù)據(jù)控制語言):創(chuàng)建用戶、設(shè)置權(quán)限阎毅、撤銷權(quán)限等焚刚。
?sqlite數(shù)據(jù)庫支持的數(shù)據(jù)類型(5種類型)
1)??null??????????? 空
2)??integer???????? 整型
3)??real??????????? 浮點(diǎn)型
4)??text/varchar??? 字符串
5)??blob??????????? 二進(jìn)制
?sqlite支持的約束條件
1)??primarykey:主鍵約束,非空且唯一
每張表都應(yīng)該設(shè)置一個(gè)主鍵扇调,找不到合適的主鍵的話矿咕,可以添加一個(gè)自增長(zhǎng)列(只能是整型)來作為表的主鍵。
一張表最多只能有一個(gè)主鍵
2)??notnull:非空約束
3)??unique:唯一約束,可以為空
4)??check:檢查約束
5)??default:默認(rèn)約束
6)??foreignkey:外鍵約束
ü? 主要用于維護(hù)引用的完整性(默認(rèn)沒有開啟碳柱,要想使用必須手動(dòng)開啟)
ü? 手動(dòng)開啟外鍵約束:PRAGMAforeign_keys = ON
ü? 外鍵列的值必須在主鍵列中存在捡絮,否則就會(huì)出錯(cuò)。
ü? 語法:字段名 數(shù)據(jù)類型 references表名(字段名)
刪除表:drop table 表名;
l常用的指令
?? .quit?????????????? 退出
?? .tables???????????? 查看數(shù)據(jù)庫中所有表名
?.headers on/off顯示/隱藏表頭
?.schema表名查看表結(jié)構(gòu)
?? select * from 表名? 查看指定表內(nèi)的所有數(shù)據(jù)(一般用于測(cè)試)
數(shù)據(jù)庫操作:select莲镣、insert福稳、update、delete
插入:語法:insert into 表名 (字段列表) values(值列表);
實(shí)例:insert into stu (id,name,score,age,gender)values(1,’xiaohua’,60,20,’男’);
注意:主鍵如果是整型瑞侮,那么就自動(dòng)擁有自增長(zhǎng)的特性的圆。
==如給添加數(shù)據(jù)的時(shí)候是給所有的字段都賦值了話,那么字段列表可以省略不寫半火。
Insert into stu values(5,’xiaohua’,60,20,’男’)
更新:語法:update 表名 set 字段名1 = 越妈?,字段名2 = ?, ... [where 條件];
刪除:語法:delete from 表名 [where 條件];
Delete from stu?? //表中的數(shù)據(jù)回全部刪除
Deletefrom stu where id=3
查詢:語法:select 列名1,列名2,...from 表名 [where 條件][group by 列名]
[having條件][order by列名 asc/desc][limit 初始位置,查詢個(gè)數(shù)]
【
給列取別名:select id as 學(xué)號(hào),name 姓名,score,age,gender from stu
//在給列取別名的時(shí)候钮糖,as可以省略不寫梅掠。
//給表去別名
Selects.id,name from stu as s;
】
?多表查詢
ü內(nèi)聯(lián)(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;
【
】
ü外聯(lián)(outer join)
1)? 左外查詢(left [outer] join)
以左表為基準(zhǔn)表店归,先和右表做內(nèi)聯(lián)阎抒,接下來左表中匹配不到的記錄也會(huì)拼成一條記錄,只是值為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;
?按列來進(jìn)行排序
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;
以多個(gè)列來排序且叁,先按age降序,再把a(bǔ)ge相同的記錄按名字降序排序
獲取指定個(gè)數(shù)的記錄
要求:查詢出班級(jí)中年齡最大的前三個(gè)學(xué)員的個(gè)人信息
selectname,age,address from stu_infoorder by age desc limit0,3;
?聚合函數(shù)
count(列名)肄满、sum(列名)谴古、max(列名)、min(列名)稠歉,avg(列名)
在做查詢語句的時(shí)候掰担,我們不能使用列名和聚合函數(shù)一起查詢,因?yàn)榱胁樵兂鰜淼膫€(gè)數(shù)可能有多個(gè)怒炸,而聚合函數(shù)的結(jié)構(gòu)只有一個(gè)带饱,不能組成一張規(guī)則的表。
Select count(*)from stu;???? //計(jì)數(shù)求和
?分組查詢
要求:打印輸出班級(jí)中每個(gè)城市所對(duì)應(yīng)的學(xué)生數(shù)勺疼。
select address,count(*) as 人數(shù) from stu_info group by address order by 人數(shù)desc;
select count(*) from stu group by tidhavingtidis not null;
注意事項(xiàng):
1)??在分組中使用聚合函數(shù),聚合函數(shù)統(tǒng)計(jì)的不是表中的所有記錄捏鱼,而是統(tǒng)計(jì)每個(gè)組中的記錄
2)??在分組查詢中执庐,分組的列可以和聚合函數(shù)一起查詢
3)??可以以多個(gè)列進(jìn)行分組。
select address,count(*)as 人數(shù) from stu_info group by addresshaving 人數(shù)>1;
PS:where和 having的區(qū)別导梆?
where在分組之前對(duì)表中所有的記錄進(jìn)行條件過濾轨淌,而having必須用在groupby 之后迂烁,主要用來對(duì)組進(jìn)行設(shè)置過濾條件。
Where用于分組之前查詢結(jié)果的篩選递鹉,而having是用于分組之后查詢結(jié)果的篩選
Select tid,count(*) from stu where score >=60 group by tidhaving tid is not null;
?模糊查詢
ü關(guān)鍵字: like
% : 代表任意多個(gè)字符(0到多)
_ : 代表任意一個(gè)字符(1)
Select * from stu where name like ‘x%’;
ü? 示例:
a)??查詢姓名中包含字母a的所有人
selectname,age,address from stu_info where name like '%a%';
b)??查詢姓名中第二個(gè)字母為h的人員信息
selectname,age,address from stu_info where name like '_h%';
SQLite3
命令行軟件
注意:不要直接雙擊打開sqlite3.exe,如果直接雙擊打開軟件會(huì)將數(shù)據(jù)保存在內(nèi)存的一塊
Ctrl+c??.quit?? .tables
//創(chuàng)建表
create table stu(
idinteger primary key,?????? //主鍵約束?? autoincrement 自增長(zhǎng)功能
namevarchar(20) not null,?? //不能為空
ageinteger check(age>18),
socrereal???????? unique,????????? //唯一性約束
gendervarchar(2) default(‘男’)?? //默認(rèn)值
);
//查詢指定字段為空的記錄
Select * from stu where tid is null;?? //is not null
?語法:select列名1,列名2,...from 表名 [where 條件][group by 列名]
[having條件][orderby列名 asc/desc][limit 初始位置,查詢個(gè)數(shù)]
】