1视译、 SQLite3 介紹
SQLite是一款輕型的嵌入式數(shù)據(jù)庫(kù)
它占用資源非常的低,處理速度快入蛆,高效而且可靠响蓉。
在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了哨毁。
- 數(shù)據(jù)庫(kù):
數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織枫甲、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。 - 數(shù)據(jù)庫(kù)可以分為2大種類
1. 關(guān)系型數(shù)據(jù)庫(kù)(主流)
2. 對(duì)象型數(shù)據(jù)庫(kù)
常用的關(guān)系型數(shù)據(jù)庫(kù):
PC端:Oracle扼褪、MySQL想幻、SQL Server、Access话浇、DB2脏毯、 Sybase
嵌入式\移動(dòng)客戶端:SQLite
對(duì)象型型數(shù)據(jù)庫(kù):
remal , core date。
數(shù)據(jù)庫(kù)是如何存儲(chǔ)數(shù)據(jù)的:
數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)和excel很像幔崖,以表(table)為單位
** 數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的步驟 **
- 新建一個(gè)數(shù)據(jù)庫(kù)
- 新建一張表(table)
- 添加多個(gè)字段(column食店,列,屬性)
- 添加多行記錄(row赏寇,每行存放多個(gè)字段對(duì)應(yīng)的值)
-
SQLite3常用的5種數(shù)據(jù)類型:
- text:文本字符串
- integer:整數(shù)
- real :浮點(diǎn)數(shù)
- null :布爾值(true吉嫩,false)
- blob: 二進(jìn)制數(shù)據(jù),比如文件嗅定,圖片之類的
實(shí)際上SQLite是無(wú)類型的自娩。即不管你在創(chuàng)表時(shí)指定的字段類型是什么,存儲(chǔ)是依然可以存儲(chǔ)任意類型的數(shù)據(jù)渠退。而且在創(chuàng)表時(shí)也可以不指定字段類型忙迁。SQLite之所以什么類型就是為了良好的編程規(guī)范和方便開(kāi)發(fā)人員交流,所以平時(shí)在使用時(shí)最好設(shè)置正確的字段類型碎乃!主鍵必須設(shè)置成integer
-
SQLite 命令
與關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn) SQLite 命令類似于 SQL姊扔。命令包括 CREATE、SELECT荠锭、INSERT旱眯、UPDATE、DELETE 和 DROP证九。這些命令基于它們的操作性質(zhì)可分為以下幾種:DDL - 數(shù)據(jù)定義語(yǔ)言:
命令 描述
CREATE 創(chuàng)建一個(gè)新的表删豺,一個(gè)表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象愧怜。
ALTER 修改數(shù)據(jù)庫(kù)中的某個(gè)已有的數(shù)據(jù)庫(kù)對(duì)象呀页,比如一個(gè)表。
DROP 刪除整個(gè)表拥坛,或者表的視圖蓬蝶,或者數(shù)據(jù)庫(kù)中的其他對(duì)象尘分。DML - 數(shù)據(jù)操作語(yǔ)言
命令 描述
INSERT 創(chuàng)建一條記錄。
UPDATE 修改記錄丸氛。
DELETE 刪除記錄培愁。-
DQL - 數(shù)據(jù)查詢語(yǔ)言
命令 描述
SELECT 從一個(gè)或多個(gè)表中檢索某些記錄。SQL 語(yǔ)句特點(diǎn)
不區(qū)分大小寫(xiě)
有關(guān)鍵字
不可使用關(guān)鍵字命名表和字段
2缓窜、 SQLite3 的語(yǔ)法使用
SQLite 常見(jiàn)的操作語(yǔ)法:語(yǔ)法學(xué)習(xí)網(wǎng)站
-
表操作
1.1 ** 創(chuàng)建表**
create table 表名(字段1 類型定续,字段2 類型)
/*
1、先判斷 t_demo 表是否存在禾锤,不存在我就創(chuàng)建私股,(這個(gè)是避免報(bào)錯(cuò))
2、設(shè)置 id 為主鍵恩掷,
3倡鲸、設(shè)置 id 是自增長(zhǎng) (只有integer 的數(shù)據(jù)才可以自增長(zhǎng))
*/
CREATE TABLE IF NOT EXISTS t_demo (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);
1.2. 刪除表
drop table 表名
/*
1、進(jìn)行一次判斷黄娘,如果表存在就將表刪除(避免出錯(cuò))
*/
DROP TABLE IF EXISTS t_demo
- 數(shù)據(jù)操作
2.1 插入數(shù)據(jù) (增)
insert into 表名 (字段1峭状,字段2)values (字段值1, 字段值2)逼争;
/*
插入數(shù)據(jù)
*/
INSERT INTO t_demo (id, name) VALUES (5, 'zhangsan');
上一句只能運(yùn)行一次宁炫,第二次就報(bào)錯(cuò)(id 是自增長(zhǎng)的,每次插入一個(gè)固定值插不進(jìn)去)
INSERT INTO t_demo ( name) VALUES ('zhangsan');
注意點(diǎn):
數(shù)據(jù)庫(kù)插入操作中字符串使用 單引號(hào)
2.2 更新數(shù)據(jù) (改)
update 表名 set 字段1 = 字段1 的值氮凝,字段2 = 字段2的值。望忆。罩阵。
/*
更新數(shù)據(jù)
注意更新數(shù)據(jù)的時(shí)候不要更新主鍵
*/
UPDATE t_demo SET name = 'lisi';
(這個(gè)是更新name 下面的所有數(shù)據(jù)的值為 lisi,主要是沒(méi)有指定更新那一條數(shù)據(jù))
更新固定的數(shù)據(jù)
where 字段= 某個(gè)值启摄;
/*
修改指定的那條數(shù)據(jù)
*/
UPDATE t_demo SET name = 'lisi' WHERE id = 15;
2.3 刪除數(shù)據(jù)(刪)
delete from 表名
/*
刪除數(shù)據(jù)
*/
DELETE FROM t_demo;
(刪除表里面的所有數(shù)據(jù)稿壁,主要是沒(méi)有指定要?jiǎng)h除那些數(shù)據(jù))
/*
刪除指定的那條數(shù)據(jù)
*/
DELETE FROM t_demo WHERE id = 15;
2.4 查詢(查)
selete 字段1,字段2 歉备。傅是。。 from 表名
/*
查詢
*/
SELECT id FROM t_demo;
/*
查詢所有字段
*/
SELECT * FROM t_demo;
- SQLite 高級(jí)操作
3.1 起別名
主要是給表起別名
3.2 排序
selete * from 表 order by 字段蕾羊;默認(rèn)是升序
3.3 分頁(yè)
select * frome表名 limit 數(shù)值1喧笔,數(shù)值2;
數(shù)值1:跳過(guò)幾條數(shù)據(jù)龟再。
數(shù)值2: 取幾條數(shù)據(jù)书闸。
3、FMDB 簡(jiǎn)單介紹
什么是FMDB
FMDB是iOS平臺(tái)的SQLite數(shù)據(jù)庫(kù)框架
FMDB以O(shè)C的方式封裝了SQLite的C語(yǔ)言APIFMDB的優(yōu)點(diǎn)
使用起來(lái)更加面向?qū)ο罄眨∪チ撕芏嗦闊┙ⅰ⑷哂嗟腃語(yǔ)言代碼
對(duì)比蘋(píng)果自帶的Core Data框架嫌术,更加輕量級(jí)和靈活
提供了多線程安全的數(shù)據(jù)庫(kù)操作方法,有效地防止數(shù)據(jù)混亂FMDB的github地址
https://github.com/ccgus/fmdb核心類
FMDB有三個(gè)主要的類
(1)FMDatabase:一個(gè)FMDatabase對(duì)象就代表一個(gè)單獨(dú)的SQLite數(shù)據(jù)庫(kù)牌借,用來(lái)執(zhí)行 sql 語(yǔ)句度气。
(2)FMResultSet:代表使用FMDatabase執(zhí)行查詢后的結(jié)果集
(3)FMDatabaseQueue:用于在多線程中執(zhí)行多個(gè)查詢或更新,它是線程安全的創(chuàng)建 SQLite 數(shù)據(jù)庫(kù)的三種方式
(1)具體路徑:一個(gè)文件系統(tǒng)路徑膨报。磁盤(pán)上的文件不存在磷籍,就自動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)文件。
(2)空字符串@"" :會(huì)在臨時(shí)目錄創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù), 當(dāng)FMDatabase連接關(guān)閉時(shí)丙躏,數(shù)據(jù)庫(kù)文件也被刪除择示。
(3)nil:會(huì)創(chuàng)建一個(gè)內(nèi)存中臨時(shí)數(shù)據(jù)庫(kù),當(dāng)FMDatabase連接關(guān)閉時(shí)晒旅,數(shù)據(jù)庫(kù)會(huì)被銷毀
// 創(chuàng)建數(shù)據(jù)庫(kù)
/*
設(shè)置數(shù)據(jù)庫(kù)保存在沙盒的Doc的文件夾
*/
let cachePath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
let sqliteDataBasePath = cachePath?.stringByAppendingString("/sqlite.db")
// 這里 path 設(shè)置的為具體的路徑
db = FMDatabase(path: sqliteDataBasePath)
// 打開(kāi)數(shù)據(jù)庫(kù)
if db!.open() {
// 數(shù)據(jù)庫(kù)創(chuàng)建成功栅盲,并打開(kāi)
print("數(shù)據(jù)庫(kù)創(chuàng)建成功,并打開(kāi)")
} else {
// 數(shù)據(jù)庫(kù)創(chuàng)建失敗
print("數(shù)據(jù)庫(kù)創(chuàng)建失敗")
}
- 數(shù)據(jù)庫(kù)操作的執(zhí)行 (增废恋,刪谈秫,改,查)
數(shù)據(jù)庫(kù)執(zhí)行操作之前鱼鼓,必須將數(shù)據(jù)進(jìn)行打開(kāi),如果沒(méi)有足夠的資源或權(quán)限打開(kāi)和/或創(chuàng)建數(shù)據(jù)庫(kù), 打開(kāi)失敗拟烫。
在FMDB中,除查詢以外的所有操作迄本,都稱為“更新”
執(zhí)行更新返回一個(gè)值,一個(gè)布爾值硕淑。true 意味著更新成功執(zhí)行,false意味著一些錯(cuò)誤的返回值。你可以調(diào)用 lastErrorMessage 和 lastErrorCode 方法來(lái)獲取更多的信息嘉赎。
查詢操作
使用 一個(gè)executequery……方法來(lái)執(zhí)行 SELECT語(yǔ)句進(jìn)行查詢操作置媳。
執(zhí)行查詢會(huì)返回一個(gè)FMResultSet結(jié)果集對(duì)象,如果操作成功結(jié)果集將有值公条,失敗結(jié)果集將為nil拇囊。您應(yīng)該使用 lastErrorMessage 和 lastErrorCode 方法來(lái)確定查詢失敗的原因。
3靶橱、 SQLite3 在項(xiàng)目中使用
-
要使用 SQLite3 我們就必須要添加一個(gè)
libsqlite3.dylib
類庫(kù)寥袭, 并導(dǎo)入頭文件。
這是一個(gè)C語(yǔ)言的庫(kù)关霸,所以直接使用SQLite3還是比較麻煩的传黄。我們使用 OC 的封裝 FMDB
20150423225952694.png
20150423230336717.png SQLite3 是基于 c 語(yǔ)言的,我們使用 SQLite3 的 OC 的第三方類庫(kù) FMDB下載地址 https://github.com/ccgus/fmdb
cocoapods 安裝 FMDB
(cocoapods 安裝谒拴,不需要上面添加類庫(kù)的步驟)
$ pod 'FMDB'