iOS 下Sqlite的簡單使用

一.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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章