天天看點

iOS:本地資料庫sqlite的介紹

一、資料庫的概念:

1.、什麼是資料庫

  SQL Server 2010、Oracle、MySQL

  關系資料庫

  NoSQL資料庫-非關系型資料庫

  資料庫主要由表組成

  表由字段組成

  資料 就是表中的記錄

  表間的關系:一對一、一對多(訂單:訂單的頭和訂單明細)

  外鍵 

  主鍵:建立索引,不能重複

2、SQL(結構化查詢語言)語句

  A、資料操作的SQL語句:

     2.1 查詢 

       select(字段名) from(表名); 

       where 子句:定義查詢條件  

       排序:order by 字段名 (asc,desc) 

       分組:group by 字段名    

    2.2 删除 

      delete from(表名)  where name = @“admin”;   

    2.3 插入

          insert into(表名)(字段清單) values(字段清單對應的字段值);

    2.4 更新

             update(表名) set 字段=值 where 子句;

  B、對資料庫維護的SQL語句:

    建立表:

    create table (表名) (定義字段:字段名 字段類型);

           sqlite3 資料庫名    //在終端下進入某一個本地的資料庫(如果不存在就自動建立一個)

        .schema 表名  //在終端下可以快速檢視某一個表中的所有字段

        .table        //在終端下可以檢視建立的所有表   

    .exit/.quit         //在終端下退出某一個資料庫 

 二、SQLite的基本使用

SQLite支援的常見資料類型如下所示。

–INTEGER 有符号的整數類型

–REAL 浮點類型

–TEXT 字元串類型,采用UTF-8和UTF-16字元編碼

–BLOB 二進制大對象類型,能夠存放任何二進制資料

(C語言中)使用步驟:

1.建立項目時,先導入系統架構(C語言). (libsqlite3)

2.頭檔案#import<sqlite3.h>

3. sqlite3_open(fileName.UTF8String, &_db); 打開或者建立一個資料

    *_db自己定義一個sqlite3的成員變量.進行增删改查時要用

4.sqlite3_exec(_db, sql, NULL, NULL,&error);  //不帶結果集的語句,隻是對表做操作,不會傳回出結果

*該函數可進行insert,delete,update操作.

5.查詢操作select. //帶結果集的查詢語句,會傳回出結果,從表中查詢到的資料都會放到stmt結構體中

*sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);做查詢前準備,檢測SQL語句是否正确.

*sqlite3_step(stmt) 提取查詢到的資料,一次提取一條.//通過循環可以取出所有資料

*sqlite3_column_text(stmt, 0)取出第0列的資料.

6.關閉資料庫 sqlite3_close(sqlite3 *);

————————————————————————————————————————————————————

執行帶參數的SQL語句

NSString *sqlStr = @"INSERT OR REPLACE INTO note (cdate,content) VALUES (?,?)";

sqlite3_stmt *statement;

//預處理過程,産生結果集

if (sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &statement, 

NULL) == SQLITE_OK)

 {

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

  NSString *nsdate = [dateFormatter stringFromDate:model.date]; 

  //綁定參數開始

  sqlite3_bind_text(statement, 1, [nsdate UTF8String], -1, NULL);  sqlite3_bind_text(statement, 2, [model.content UTF8String], 

-1,    NULL);

  //執行插入

if (sqlite3_step(statement) != SQLITE_DONE)

 {  

NSAssert(NO, @"插入資料失敗。"); } 

 } 

}

//清理結果集,防止記憶體洩露

 sqlite3_finalize(statement);

單例模式:(這裡主要用來保證初始化的資料庫是唯一的,隻要建立了一次,那麼它就不會被再建立)

+ (NoteDAO*)sharedManager 

  static dispatch_once_t once; 

  dispatch_once(&once, ^{ 

  sharedManager = [[self alloc] init]; 

  [sharedManager   createEditableCopyOfDatabaseIfNeeded]; }

  );

   return sharedManager;

 }

程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!

本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4824272.html,如需轉載請自行聯系原作者