<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      iOS- SQLite3的基本使用

      iOS- 簡單說說iOS移動客戶端SQLite3的基本使用
       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)";
      6     [self execSQL:sql message:@"創建數據表"];
      復制代碼
       
       
       
      4.插入數據
      1     // 1. SQL
      2     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:@"修改"];
      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:@"刪除"];
      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     }
      復制代碼

      posted on 2014-02-12 14:57  ACM_Someone like you  閱讀(362)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产激情国产精品久久源| 男女爽爽无遮挡午夜视频| 自拍偷拍另类三级三色四色| 成人3D动漫一区二区三区| 国产二区三区不卡免费| 国产美女久久久亚洲综合 | 99久久亚洲综合精品成人| 最新AV中文字幕无码专区| 超碰人人模人人爽人人喊手机版| 亚洲 制服 丝袜 无码| 久久精品亚洲精品国产色婷| 国产乱人偷精品人妻a片| 老男人久久青草av高清| 亚洲人成电影在线天堂色| 深夜精品免费在线观看| 日韩精品成人区中文字幕| 午夜福利理论片高清在线| 国产激情一区二区三区不卡| 加勒比无码人妻东京热| 水富县| 亚洲国产精品一区二区久| 无套内谢少妇毛片aaaa片免费 | 最好看的中文字幕国语| 欧美色欧美亚洲高清在线视频| 国产成人精品亚洲高清在线| 亚洲一卡2卡三卡四卡精品| 国产欧美亚洲精品a| 午夜性爽视频男人的天堂| 久章草在线毛片视频播放| 日韩中文字幕v亚洲中文字幕| 人妻无码不卡中文字幕系列| 成人免费亚洲av在线| 坐盗市亚洲综合一二三区| 大陆一级毛片免费播放| 亚洲国产一区二区三区亚瑟| 亚洲国语自产一区第二页| 国产欧美亚洲精品第一页在线| 丝袜美腿视频一区二区三区| 又黄又刺激又黄又舒服| 中文字幕一区二区久久综合| 亚洲午夜福利网在线观看|