iOS 資料庫SQLite

來源:互聯網
上載者:User

iOS 資料庫SQLite
SQLite介紹SQLite是一款輕型的嵌入式資料庫,安卓和iOS開發使用的都是SQLite資料庫。它的特點:它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它的處理速度比MySQL、PostgreSQL這兩款著名的資料庫都還快。它是C語言架構的,跨平台性強。

要在iOS中使用SQLite3,需要在Xcode匯入libsqlite3的庫

下面是結合SQL陳述式完成資料庫操作,使用到的是上面定義的方法:
建立表:create table 表名稱(欄位1,欄位2,……,欄位n,[表級約束])[TYPE=表類型];插入記錄:insert into 表名(欄位1,……,欄位n) values (值1,……,值n);刪除記錄:delete from 表名 where 條件運算式;修改記錄:update 表名 set 欄位名1=值1,……,欄位名n=值n where 條件運算式;查看記錄:select 欄位1,……,欄位n  from  表名 where 條件運算式;

1,開啟資料庫
使用的C語言函數如下:

/* 開啟資料庫 */int sqlite3_open(  const char *filename,   /* 資料庫路徑(UTF-8) */  sqlite3 **pDb           /* 返回的資料庫控制代碼 */);

2,查詢資料庫
使用的C語言函數:

/* 執行有返回結果的SQL語句 */int sqlite3_prepare_v2(  sqlite3 *db,            /* 資料庫控制代碼 */  const char *zSql,       /* SQL語句(UTF-8) */  int nByte,              /* SQL語句最大長度,-1表示SQL支援的最大長度 */  sqlite3_stmt **ppStmt,  /* 返回的查詢結果 */  const char **pzTail     /* 返回的失敗資訊*/);

3,插入資料
使用的C語言函數:

/* 執行有返回結果的SQL語句 */int sqlite3_prepare(  sqlite3 *db,            /* 資料庫控制代碼 */  const char *zSql,       /* SQL語句(UTF-8) */  int nByte,              /* SQL語句最大長度,-1表示SQL支援的最大長度 */  sqlite3_stmt **ppStmt,  /* 返回的查詢結果 */  const char **pzTail     /* 返回的失敗資訊*/);

4.刪除資料庫
使用的C語言函數:

/* 執行沒有返回的SQL語句 */int sqlite3_exec(  sqlite3 *db,                               /* 資料庫控制代碼 */  const char *sql,                           /* SQL語句(UTF-8) */  int (*callback)(void*,int,char**,char**),  /* 回調的C函數指標 */  void *arg,                                 /* 回呼函數的第一個參數 */  char **errmsg                              /* 返回的錯誤資訊 */);

5, 關閉資料庫
使用的C語言函數:

/* 關閉資料庫 */int sqlite3_close(sqlite3 *db);

下面來個小例子:

這裡請求資料是微博的使用者名稱和id 定義一個模型

DataModel.h

#import @interface DataModel : NSObject@property (nonatomic, copy) NSString *screen_name;@property (nonatomic, copy) NSString *avatar_hd;- (instancetype)initWithDictionary:(NSArray *)dictionary;@end

DataModel.m

#import "DataModel.h"@implementation DataModel- (instancetype)initWithDictionary:(NSDictionary *)dictionary {    if (self = [super init]) {        // 當有很多屬性 一個一個的寫 太麻煩了,        // 一句話搞定        [self setValuesForKeysWithDictionary:dictionary];    }    return self;}// 一般情況下 請求資料回來,裡麵包含很多資料,要一個一個的寫,寫錯了一個就報錯// 請求資料回來有很多,但你又用不上,就寫上這個方法- (void)setValue:(id)value forUndefinedKey:(NSString *)key {    // 列印的是 你沒用到的key    NSLog(@"%@",key);}@end

在定義一個處理資料庫的類 DataBase

DataBase.h

#import /** 匯入DataModel*/#import "DataModel.h"@interface DataBase : NSObject/** 開啟資料庫*/+ (void)openDB;/** 查*/+ (NSArray *)find;/** 插*/+ (BOOL)insertModel:(DataModel *)dataModel;+ /** 刪除*/+ (BOOL)deleteModel:(DataModel *)dataModel;@end

DataBase.m

#import "DataBase.h"// 匯入#import @implementation DataBase// 建立一個資料庫物件static sqlite3 *db;#pragma mark - 開啟資料庫+ (void)openDB {    // 將匯入的資料庫移動到 Documents 檔案夾下    // 首先要在外面建立一個資料庫 把資料庫匯入工程裡面 "這一步 一定要做"    // 拿到資料庫的路徑    // 這裡 WeiBo 是建立資料庫的名稱 (千萬不要搞錯)    NSString *originPath = [[NSBundle mainBundle] pathForResource:@"WeiBo" ofType:@"sqlite"];    // Documents  檔案夾下的路徑  然後進行拼接    NSString *targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"collection.sqlite"];    NSFileManager *manager = [NSFileManager defaultManager];    if (![manager fileExistsAtPath:targetPath]) {        [manager moveItemAtPath:originPath toPath:targetPath error:nil];    }    char *filename = (char *)[targetPath UTF8String];    // 開啟資料庫    int result = sqlite3_open(filename, &db);    if (result == SQLITE_OK) {        NSLog(@"資料庫開啟成功");    } else {        NSLog(@"資料庫開啟失敗");    }}#pragma mark - 查+ (NSArray *)find {    NSMutableArray *mArray = [NSMutableArray array];    // 開啟資料庫    [self openDB];    // 聲明一個陳述    sqlite3_stmt *stmt = nil;    // 查表    // 這裡 weiBo 是建立資料庫下的表名稱 (千萬不要搞錯)    const char *sql = "select *from weiBo";    // 將sql 文本轉成一個 語句對象    int result = sqlite3_prepare_v2(db, sql, -1, &stmt, nil);    if (result == SQLITE_OK) {        NSLog(@"準備查詢成功");        while (sqlite3_step(stmt) == SQLITE_ROW) {            // 提取資料            const char *screen_name = (const char *)sqlite3_column_text(stmt, 0);            const char *avatar_hd = (const char *)sqlite3_column_text(stmt, 1);            DataModel *dataModel = [[DataModel alloc] init];            dataModel.screen_name = [NSString stringWithCString:screen_name encoding:4];            dataModel.avatar_hd = [NSString stringWithCString:avatar_hd encoding:4];            //"NSNumber  類型  " [NSNumber numberWithInteger:[[NSString stringWithCString:deal_id encoding:4] integerValue]];            [mArray addObject:dataModel];        }    }    return mArray;}#pragma mark - 插+ (BOOL)insertModel:(DataModel *)dataModel {    // 開啟資料庫    [self openDB];    sqlite3_stmt *stmt = nil;    // 這裡 weiBo 是建立資料庫下的表名稱 (千萬不要搞錯)    const char *sql = "insert into weiBo(screen_name, avatar_hd) values(?, ?)";    // 將 sql 文本轉換成一個 語句對象    int result = sqlite3_prepare(db, sql, -1, &stmt, nil);    if (result == SQLITE_OK) {        //將要插入的資料插入到資料庫        sqlite3_bind_text(stmt, 1, [dataModel.screen_name UTF8String], -1, nil);        sqlite3_bind_text(stmt, 2, [dataModel.avatar_hd UTF8String], -1, nil);        //[NSNumber]  sqlite3_bind_text(stmt, 1, [[NSString stringWithFormat:@"%@",model.comment_num] UTF8String], -1, nil);        if (sqlite3_step(stmt) == SQLITE_DONE) {            flag = YES;        }    }    return flag;}#pragma mark - 刪 + (BOOL)deleteModel:(DataModel *)dataModel {    BOOL flag = NO;    // 開啟資料庫    [self openDB];    // 這裡 weiBo 是建立資料庫下的表名稱 (千萬不要搞錯)    NSString *sql = [NSString stringWithFormat:@"delete from weiBo where screen_name = %@", dataModel.screen_name];    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);    if (result == SQLITE_OK) {        NSLog(@"刪除成功");        flag = YES;    } else {        NSLog(@"刪除失敗");    }    return flag;}@end
建立資料庫

(用Firefox瀏覽器)
1,SQLite Manager下載

2,建立資料庫有幾種方法(這理就不一一介紹了) 我的是Firefox瀏覽器裡面的資料庫
開啟瀏覽器 –> 工具 –> 找到SQLite Manager

3,點擊:SQLite Manager 頁面是這樣

4,建立資料庫

5,案頭 把它拖到工程中

6,建立資料庫的表(表裡面建立欄位 可以理解為屬性)

7,表建立成功後

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.