国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS-簡單說說iOS移動客戶端SQLite3的基本使用

2019-11-14 20:45:18
字體:
來源:轉載
供稿:網友

1.為什么要使用SQLite3?

大量數據需要存儲
•管理數據,存儲數據
 
SQLite是一種關系型數據庫(也是目前移動客戶端的主流數據庫)
 
 

2.SQLite3的幾種存儲類型 

 
a.NULL: 表示該值為NULL值
b.INTEGER: 無符號整型值
c.REAL: 浮點值
d.TEXT: 文本字符串
e.BLOB: 二進制數據(比如文件)
 
•實際上SQLite是無類型的,建表時聲明或不聲明類型都可以,也就意味著創表語句可以這么寫:

create table t_student(name, age);

但為了保持良好的編程規范,方便程序員之間的交流,編寫建表語句的時候最好加上每個字段的具體類型
 
 

3.SQLite3的具體實現 

3.1  

•在iOS中要使用SQLite3,需要添加庫文件:libsqlite3.dylib并導入主頭文件,這是一個C語言的庫
 

3.2  

創建數據庫(sqlite3_opendb)

 1 // 設置沙盒中的文件路徑 2     // 提示:在自己開發中,不要用.db結尾的sqlite數據庫文件名 3     NSString *dbPath = [@"readme.db" appendDocumentDir]; 4     NSLog(@"%@", dbPath); 5      6     /** 7      sqlite3_open 8       9      1) 如果數據庫存在,直接打開10      2) 如果數據庫不存在,先創建數據庫文件,再打開11      */12     _db = NULL;13     14     if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {15         NSLog(@"數據庫打開成功");16     } else {17         NSLog(@"數據庫打開失敗");18     }

 

 

3.3  

1.單步執行操作(sqlite3_exec)
#PRagma mark 單步執行SQL- (void)execSQL:(NSString *)sql message:(NSString *)message{    // 執行SQL語句    char *errmsg = NULL;    if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {        NSLog(@"%@成功!", message);    } else {        // C語言中字符串輸出應該用%s        NSLog(@"%@失敗 - %s", message, errmsg);    }}

 

 
2.創建數據表
1     // 1. 檢查沙盒,判斷數據庫文件是否存在,如果存在就不再建表;2     // 2. 數據庫的方法:IF NOT EXISTS,放在表名之前即可3     // 定義SQL語句4     NSString *sql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)";5 6     [self execSQL:sql message:@"創建數據表"];

 

 
4.插入數據
1     // 1. SQL2     NSString *sql = [NSString stringWithFormat:@"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)", person.name, person.gender, person.age, person.height];3     4     [self execSQL:sql message:@"新增個人記錄"];

 

5.更新數據
1 //修改2 - (void)updatePerson:(Person *)person{3     4     5     NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];6     7     [self execSQL:sql msg:@"修改"];8 9 }

 

6.刪除數據
1 //刪除2 - (void)removePerson:(NSInteger)personID{3     4     5     NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];6     7     [self execSQL:sql msg:@"刪除"];8 9 }

 

7.查詢操作
sqlite3_prepare_v2檢查sql的合法性
sqlite3_step逐行獲取查詢結果
sqlite3_coloum_xxx獲取對應類型的內容
sqlite3_finalize釋放stmt
 1  // 1. SQL 2     NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person"; 3      4     // 2. 查詢語句通常是使用字符串拼接出來的 5     // 因此,在正常使用查詢語句之前,需要檢查SQL語句的語法正確! 6     sqlite3_stmt *stmt = NULL; 7      8     if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) { 9         NSLog(@"語法正確");10         // 利用句柄,逐一查詢符合條件的數據11         // sqlite3_step 每次提取一條查詢的記錄行,不斷重復,一直取到最后一條記錄位置12         while (SQLITE_ROW == sqlite3_step(stmt)) {13             // 取到行信息,逐一獲取每一列的內容14             // iCol對應的就是SQL語句中字段的順序,從0開始15             // 根據實際查詢字段的屬性,使用sqlite3_column_xxx取得對應的內容即可16             int ID = sqlite3_column_int(stmt, 0);17             const unsigned char *name = sqlite3_column_text(stmt, 1);18             int age = sqlite3_column_int(stmt, 2);19             int gender = sqlite3_column_int(stmt, 3);20             CGFloat height = sqlite3_column_double(stmt, 4);21             22             // const unsigned char *直接輸出看不出結果,需要轉換23             NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];24             25             Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];26             27             NSLog(@"%@", p);28         }29     } else {30         NSLog(@"語法錯誤");31     }

 

 

作者: 清澈Saup
出處: http://www.survivalescaperooms.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色达县| 武宁县| 玉环县| 邢台县| 鄂伦春自治旗| 柳江县| 如东县| 仪陇县| 渝中区| 嘉鱼县| 共和县| 丹江口市| 墨竹工卡县| 云南省| 仁寿县| 商河县| 涡阳县| 辽阳县| 阿合奇县| 贡嘎县| 都江堰市| 开封县| 平乡县| 色达县| 伊金霍洛旗| 凤翔县| 靖边县| 武胜县| 蓝田县| 定襄县| 绥中县| 乌兰县| 古交市| 嘉荫县| 长海县| 大姚县| 新蔡县| 涪陵区| 绥阳县| 沁阳市| 六安市|