你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 數據庫SQLite

iOS 數據庫SQLite

編輯:IOS開發綜合

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

創建數據庫

(用火狐浏覽器)
1,SQLite Manager下載

這裡寫圖片描述


2,創建數據庫有幾種方法(這理就不一一介紹了) 我的是火狐浏覽器裡面的數據庫
打開浏覽器 –> 工具 –> 找到SQLite Manager
這裡寫圖片描述


3,點擊:SQLite Manager 頁面是這樣
這裡寫圖片描述


4,創建數據庫
這裡寫圖片描述


5,桌面 把它拖到工程中
這裡寫圖片描述


6,創建數據庫的表(表裡面創建字段 可以理解為屬性)
這裡寫圖片描述
這裡寫圖片描述


7,表創建成功後
這裡寫圖片描述

   
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved