這周的內(nèi)容又多又難,作業(yè)也不大會(huì)做QAQ就整理一下sqlite3的筆記好了。這周的實(shí)操作業(yè)就等著學(xué)習(xí)其它同學(xué)們的作業(yè)了( ̄^ ̄)ゞ
SQL的全稱是Structured Query Language,即結(jié)構(gòu)化查詢語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng),是一種操縱關(guān)系數(shù)據(jù)庫的語言。
關(guān)系數(shù)據(jù)庫是由若干張表格,每個(gè)表格中有若干個(gè)字段這種形式組成的。在這個(gè)表格上可以進(jìn)行各種關(guān)系運(yùn)算等。
下圖是一個(gè)使用第三方軟件做出的sqlite表格供參考:

SQL的語言有以下四種:
DDL(Data Definition Language)數(shù)據(jù)庫定義語言
DML(Data Manipulation Language)數(shù)據(jù)操縱語言
DCL(Data Control Language)數(shù)據(jù)庫控制語言
TCL(Transaction Control Language)事務(wù)控制語言
在IOS開發(fā)中常用的是前面兩種,用于創(chuàng)建數(shù)據(jù)庫,還有增刪改查的操作。
使用SQLite數(shù)據(jù)庫,首先要了解如何創(chuàng)建庫表結(jié)構(gòu)。

根據(jù)文法圖,我們可以組合出一個(gè)簡單的語句:
create table ios_students ( id integer not null primary key, name varcher not null, get integer, score real)
如果希望安全一點(diǎn),還可以寫成
create table if not exists ios_students ( id integer not null primary key, name varcher not null, get integer, score real)
這樣可以避免重復(fù)建表覆蓋已經(jīng)存在的表格。
以上只是根據(jù)文法圖得到的一些簡單語句,還有更多的用法全部可以參考文法圖得出。
最后,在建立表格的過程中,需要定義存儲類型,不過起始可以隨便寫,引擎會(huì)自動(dòng)做判斷,詳情可以參考文法圖左下角的藍(lán)色字體部分。
接下來看看保存數(shù)據(jù)的語句使用的文法圖:

根據(jù)文法圖可以舉個(gè)??:
insert into ios_students values (101, 'phil', 25, 85);
insert into ios_sutdents (id, name) values (102, 'jane');
查詢數(shù)據(jù)操作的文法圖:

舉個(gè)??:
select * from ios_students where id > 100;
select * from ios_students where name = 'jane';
select * from ios_students where name like 'J%'; ? ? ? //范圍查找
刪改操作的文法圖:

舉個(gè)??:
update ios_students set score=90 where id=101;
delete from ios_students where id=102;
在IOS中使用SQLite:


查詢操作建議使用文法圖左下角的方法,先prepare一個(gè)stmt,我們會(huì)在stmt里面用“?”來代表參數(shù),而不是直接把參數(shù)值拼到SQL里面,這樣是為了防止SQL注入攻擊,在拼字符串的時(shí)候,如果字符串的信息來自外部輸入,外部可以拼一個(gè)特殊的字符串,提早結(jié)束SQL語句,然后注入一些其他的命令,這些命令可能用來查詢系統(tǒng)漏洞,對系統(tǒng)進(jìn)行攻擊等。
既然我們之前在stmt中用“?”來代表參數(shù)了,那么我們之后就要綁正確的參數(shù)進(jìn)去作為補(bǔ)償,所以之后需要使用sqlite3_bind_text(stmt,1,"john",-1,NULL)函數(shù),其中NULL是用來完成回調(diào)的,回調(diào)執(zhí)行的時(shí)候釋放內(nèi)存是最安全的。
這周就這樣吧,加油( ̄^ ̄)ゞ