數據庫SQLite(3)

上一篇介紹了coreData的簡單使用,這一次是對SQLite的使用。這二者的不一樣之處就是SQLite須要添加數據庫編寫語句,很麻煩。sql

1、步驟數據庫

使用SQLite數據庫步驟以下:dom

  1. 打開數據庫(若是沒有數據庫會自動建立本身定義的數據庫)
  2. 建立表格
  3. 執行SQL語句
  4. 實現功能

2、代碼實現函數

 1 //定義靜態變量  static sqlite3 *_sql; spa

 1 //1.打開數據庫
 2     //1.1 獲取沙盒中數據庫文件的文件路徑
 3     NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/sql.db"];
 4     NSLog(@"%@",filePath);
 5     //1.2 執行打開(建立)數據庫的方法 (若是目錄下沒有數據庫文件 會自動建立)
 6     /*
 7      1.打開數據庫
 8      int sqlite3_open(
 9      const char *filename,   // 數據庫的文件路徑
10      sqlite3 **ppDb          // 數據庫實例
11      );
12      */
13     int result = sqlite3_open([filePath UTF8String], &_sql);
14     //判斷是否存在,存在就打開,而不是從新建立
15     //result:int 類型 執行打開(建立)數據庫的方法返回的參數
16     //SQLITE_OK = 0 枚舉類型 建立/打開數據庫方法(SQL語句)執行的狀態
17     if (result == SQLITE_OK) {
18         NSLog(@"打開數據庫成功!");
19         //2.創建表格
20         //初始化SQL語句
21         const char *sql = " create table if not exists t_student (id integer primary key autoincrement, name text, age integer, score real); ";
22         //傳入執行錯誤的參數
23         char *error = NULL;
24         //執行建立表格的方法
25     /*
26      2.執行任何SQL語句
27      int sqlite3_exec(
28      sqlite3*,                                  // 一個打開的數據庫實例
29      const char *sql,                           // 須要執行的SQL語句
30      int (*callback)(void*,int,char**,char**),  // SQL語句執行完畢後的回調
31      void *,                                    // 回調函數的第1個參數
32      char **errmsg                              // 錯誤信息
33      );
34      */
35         int result = sqlite3_exec(_sql, sql, NULL, NULL, &error);
36         if (result == SQLITE_OK) {
37             NSLog(@"建立表格成功!");
38         }else {
39             NSLog(@"建立表格失敗!");
40         }
41     }else {
42         NSLog(@"打開數據庫失敗!");
43     }

 當執行完畢這一句代碼的時候就會建立出數據庫--int result = sqlite3_open([filePath UTF8String], &_sql);讀者應該注意註釋部分的解釋,很重要,在這裏不一一贅述。
指針

複製地址,找到文件並打開文件(使用Navicat Premium軟件)code

3、添加數據。orm

在數據庫中循環寫入了5條數據。sqlite

 1 //添加數據
 2 - (IBAction)insert {
 3     int i;
 4     for (i = 1; i <= 5; i ++) {
 5         int index = i;
 6         NSString *name = [NSString stringWithFormat:@"小明%d",index];
 7         //年齡、分數設置爲隨機
 8         int age = arc4random()%100;
 9         float score = arc4random()%100;
10         //SQL語句
11         NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age, score) values ('%@', %d, %.2f);\n",name, age, score];
12         char *error = NULL;
13         //
14         int result = sqlite3_exec(_sql, [sql UTF8String], NULL, NULL, &error);
15         if (result == SQLITE_OK) {
16             NSLog(@"添加數據成功!");
17         }else {
18             NSLog(@"添加數據失敗!");
19         }
20     }
21     i = 1;
22 }

4、刪除數據blog

從數據庫中刪除數據,能夠所有刪除,也能夠有選擇行的刪除。

 1   //刪除所有數據
 2 //    NSString *sql = [NSString stringWithFormat:@"delete from t_student;"];
 3     //刪除選擇的數據,須要清楚的知道選擇的數據
 4     NSString *sql = [NSString stringWithFormat:@"delete from t_student where name = '小明3'; "];
 5     char *error = NULL;
 6     int result = sqlite3_exec(_sql, [sql UTF8String], NULL, NULL, &error);
 7     if (result == SQLITE_OK) {
 8         NSLog(@"刪除數據成功!");
 9     }else {
10         NSLog(@"刪除數據失敗!");
11     }
12 }

 5、更新數據(修改)

 1 //更新數據
 2 - (IBAction)upData {
 3     NSString *sql = [NSString stringWithFormat:@"update t_student set name = '小虎' where name = '小明1' "];
 4     char *error = NULL;
 5     //執行SQL語句
 6     int result = sqlite3_exec(_sql, [sql UTF8String], NULL, NULL, &error);
 7     if (result == SQLITE_OK) {
 8         NSLog(@"更新數據成功!");
 9     }else {
10         NSLog(@"更新數據失敗!");
11     }
12 }

6、查詢數據

其實,思考一下,不管是修改、刪除都須要查詢數據。

 1 //查詢數據
 2 - (IBAction)query {
 3     //使用佔位符 stmt,
 4     NSString *sql = [NSString stringWithFormat:@" select * from t_student where name = ?; "];
 5     //2.定義一個存放集
 6     sqlite3_stmt *stmt = nil;
 7     //錯誤查詢
 8     const char *error = NULL;
 9     //3.檢測SQL語句的合法性,並將stmt 和 咱們構造的sql語句進行了綁定,經過stmt能夠填充SQL語句
10     //驗證sql語句是否正確
11     /**
12      *參數1:數據庫指針,
13      *參數2:sql語句
14      *參數3:sql語句的長度寫成-1,自動計算sql語句的最大長度,不然要本身計算長度
15      *參數4:sql語句的管理指針
16      *參數5:預留參數,將來使用
17      */
18     int result = sqlite3_prepare_v2(_sql, [sql UTF8String], -1, &stmt, &error);
19     if (result == SQLITE_OK) {
20         //參數1:sql語句管理指針
21         //參數2:上面sql語句中 ?的位置,?的下標從1開始
22         //參數3:要綁定的數據
23         //參數4:數據的長度
24         sqlite3_bind_text(stmt, 1, "小明4", -1, NULL);
25 //        //綁定字段
26 //        sqlite3_bind_int(stmt, 2, 22);
27 //        sqlite3_bind_int(stmt, 3, 98);
28         //執行SQL語句
29         int result = sqlite3_step(stmt);
30         
31         if (result == SQLITE_ROW) {//若是查詢到某一行數據,就會返回SQLITE_ROW
32            int age = sqlite3_column_int(stmt, 2);
33            NSLog(@"查詢成功");
34            NSLog(@"%d",age);
35         }
36     }
37 }

  1. 檢測SQL語句的合法性,並將stmt 和 咱們構造的sql語句進行了綁定,經過stmt能夠填充SQL語句

          sqlite3_prepare_v2(<#sqlite3 *db#>, <#const char *zSql#>, <#int nByte#>, <#sqlite3_stmt **ppStmt#>, <#const char **pzTail#>)

    2. 執行SQL語句

    sqlite3_exec(<#sqlite3 *#>, <#const char *sql#>, <#int (*callback)(void *, int, char **, char **)#>, <#void *#>, <#char **errmsg#>)

  3. 綁定字段  

         sqlite3_bind_int(<#sqlite3_stmt *#>, <#int#>, <#int#>)

         sqlite3_bind_text(<#sqlite3_stmt *#>, <#int#>, <#const char *#>, <#int n#>, <#void (*)(void *)#>)

         sqlite3_bind_double(<#sqlite3_stmt *#>, <#int#>, <#double#>)

效果圖以下:

 

當使用完數據庫以後,要關閉數據庫。這裏沒有關閉。

文章是做者原著,如若轉載,請標明出處。歡迎各位來噴。 

相關文章
相關標籤/搜索