一.Sqlite 必備知識點
1.基本概念
(1)Sqlite是什麼?
Sqlite是一款輕型的數據庫,現在最新版本爲Sqlite3.
(2)Sqlite優點
Sqlite是開源的,它採用C語言編寫,具有可移植性強,可靠性高,小而容易使用的特點.
在存儲和檢索大量數據方面非常有效,它還能夠對數據進行復雜的聚合,與NSUserDefaults,數據歸檔等方式相比,獲取結果的速度更快
2.Sqlite數據類型
(1)INTEGER
有符號的整數類型
(2)REAL
浮點類型
(3)TEXT
字符串類型,採用UTF-8和UTF-16字符編碼
(4)BLOB
二進制大對象類型,能夠存放任何二進制數據
(5)說明
- Sqlite只有以上四種數據類型.
- Sqlite中沒有Boolean類型,可以用整數0和1替代.
- Sqlite中沒有日期和時間類型,它們存儲在TEXT,REAL,INTEGER類型中
3.關鍵詞
(1)主鍵
每個表只能有一個,修飾的字段值不能重複,不能爲空
例:
(uid integer primary key autoincrement,name,score)
(2)唯一鍵
可以有多個,修飾的字段值不能重複,可以爲空
例:
(uid integer unique,name,score)
(3)外鍵
和其他表相關聯的字段
二.終端下使用Sqlite
- 每條sql語句必須以
;
結尾,注意是sql語句,而不是終端sqlite命令語句 - 以下sqlite命令語句用綠色代碼來區分,這類代碼後面不需要添加
;
(1)啓動sqlite程序
sqlite3 數據庫名.db
程序舉例:
打開database.db數據庫文件,如果文件不存在,則創建
sqlite3 database.db
(2)退出sqlite程序
.quit
(3)查看錶
.table
(4)創建表
①create table 表名(字段1,字段2,...);
②create table if not exists 表名(字段1,字段2,...);
程序舉例:
//1.
create table USER(id,name,score);
//2.
create table if not exists USER(id integer primary key auto increment,name,score);
(5)刪除表
①drop table 表名;
②drop table if exists 表名;
程序舉例:
drop table USER;
(6)增
insert into 表名(字段1,字段2,...) values(值1,值2,...);
程序舉例:
insert into USER(id,name,score) values(1,"Story5",95);
(7)刪
delete from 表名 where 條件;
程序舉例:
delete from USER where id=1;
(8)改
update 表名 set 字段=新值 where 條件;
程序舉例:
update USER set score = 99 where id = 1;
(9)查
①查詢所有記錄的所有字段
select * from USER;
②查詢前n條記錄
select * from USER limit n;
③查詢某些字段
select 字段1,字段2 from 表名;
④排序查詢
select 字段1,字段2 from 表名 order by 字段 asc/desc;
⑤多表查詢
select USER.name,KUNGFU.name,USER.score from USER,KUNGFU where USER.id = KUNGFU.id;
⑥其他查詢
1⃣️查詢記錄個數
select count(*) from 表名;
2⃣️查詢字段值總和
select num(字段) from 表名;
3⃣️查詢字段平均數
select avg(字段) from 表名;
4⃣️查詢字段最值
A.查詢字段最大值
select max(字段) from 表名;
B.查詢字段最小值
select min(字段) from 表名;
三.Xcode下使用FMDB第三方庫操作sqlite
1.導入系統支持庫
Build Phases —> Link Binary With Libraries —> Add —> 導入libsqlite3.tbd系統庫
2.沙盒路徑下實例化fmdb
NSString *sandBoxFilePath = [NSString stringWithFormat:@"%@/Documents/abc.db", NSHomeDirectory()];
FMDatabase *fmdb = [[FMDatabase alloc] initWithPath:sandBoxFilePath];
3.打開sqlite數據庫
BOOL res = [fmdb open];
if (res == NO) {
NSLog(@"數據庫打開失敗");
}
4.創建表
res = [fmdb executeUpdate:@"create table if not exists USER(uid integer primary key autoincrement,name,age,image)"];
if (res == NO) {
NSLog(@"創建表失敗");
}
5.增
數據庫只能存儲NSString
,NSNumber
,NSData
類
int age = [_ageField.text intValue];
NSData* data = UIImagePNGRepresentation(_imageView.image);
BOOL res = [fmdb executeUpdate:@"insert into USER(name,age,image) values(?,?,?)", _nameField.text, [NSNumber numberWithInt:age], data];
if (res == NO) {
NSLog(@"添加用戶失敗");
} else {
NSLog(@"添加用戶成功");
}
6.刪
BOOL res = [fmdb executeUpdate:@"delete from USER where name=?", _nameField.text];
if (res) {
NSLog(@"刪除成功");
}
7.查
/*
uid name age
1 李尋歡 38
2 李不歡 58
3 李亞鵬 48
*/
FMResultSet *set = [fmdb executeQuery:@"select * from USER"];
while ([set next]) {
//取出每一個字段的值
NSString* name = [set stringForColumn:@"name"];
int age = [set intForColumn:@"age"];
NSData* data = [set dataForColumn:@"image"];
NSLog(@"%@-%d", name, age);
}