sqlite

基本

#import "UserDB.h"
#import <sqlite3.h>
@implementation UserDB


- (void)queryTable
{
    sqlite3 *sqlite = nil;
    NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/data.sqlite"];
    int result = sqlite3_open([filePath UTF8String], &sqlite);
    if (result != SQLITE_OK){
        NSLog(@"open failed");
        return;
    }
    
    NSString *sql = @"select * from user";
    sqlite3_stmt *stmt = nil;
    //編譯
    sqlite3_prepare(sqlite, [sql UTF8String], -1, &stmt, NULL);
    //查詢
    while (sqlite3_step(stmt) == SQLITE_ROW){
        char *username = (char *)sqlite3_column_text(stmt, 0);
        char *password = (char *)sqlite3_column_text(stmt, 1);
        char *email = (char *)sqlite3_column_text(stmt, 2);
        NSLog(@"%@, %@, %@", [NSString stringWithCString:username encoding:NSUTF8StringEncoding],
              [NSString stringWithCString:password encoding:NSUTF8StringEncoding],
              [NSString stringWithCString:email encoding:NSUTF8StringEncoding]);
    }
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite);
}

- (void)createTable
{
    //
    sqlite3 *sqlite = nil;
    NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/data.sqlite"];
    NSLog(@"%@", filePath);
    // open database
    int result = sqlite3_open([filePath UTF8String], &sqlite);
    if (result != SQLITE_OK){
        NSLog(@"open failed");
        return;
    }
    NSString *sql = @"create table if not exists user (username text primary key, password text, email text)";
    char *error;
    result = sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &error);
    if (result != SQLITE_OK){
        NSLog(@"create table error %s", error);
        return;
    }
    sqlite3_close(sqlite);
    NSLog(@"create successful");
}

- (void)insertTable
{
    sqlite3 *sqlite = nil;
    NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/data.sqlite"];
    int result = sqlite3_open([filePath UTF8String], &sqlite);
    if (result != SQLITE_OK){
        NSLog(@"open failed");
        return;
    }
    
    NSString *sql = @"insert into user(username, password, email) values(?,?,?)";
    sqlite3_stmt *stmt = nil;
    sqlite3_prepare(sqlite, [sql UTF8String], -1, &stmt, NULL);
    NSString *username = @"Lance lan";
    NSString *password = @"lance";
    NSString *email = @"[email protected]";
    
    sqlite3_bind_text(stmt, 1, [username UTF8String], -1, NULL);
    sqlite3_bind_text(stmt, 2, [password UTF8String], -1, NULL);
    sqlite3_bind_text(stmt, 3, [email UTF8String], -1, NULL);
    //執行插入數據
    result = sqlite3_step(stmt);
    if (result == SQLITE_ERROR || result == SQLITE_MISUSE){
        NSLog(@"falied");
        return;
    }
    //關閉句柄
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite);
}


@end

封裝

#import "BaseDB.h"

@implementation BaseDB

//數據庫名字
- (void) setDatabaseName:(NSString *)name
{
    if (DBname){
        [DBname release];
    }
    DBname = [name retain];
}
//數據庫完整路徑
- (NSString *)filePath
{
    return [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@",DBname];
}

//創建數據庫表
- (void)createTable:(NSString *)sql
{
    sqlite3 *sqlite3 = nil;
    if (sqlite3_open([[self filePath] UTF8String], &sqlite3) != SQLITE_OK){
        NSLog(@"打開數據庫失敗");
        //sqlite3_close(sqlite3);
        return;
    }
    //創建表
    char *error;
    int result = sqlite3_exec(sqlite3, [sql UTF8String], NULL, NULL, &error);
    if (result != SQLITE_OK){
        NSLog(@"創建表失敗 %s", error);
        sqlite3_close(sqlite3);
        return;
    }
    sqlite3_close(sqlite3);
}

//數據庫的操作,增刪查改
- (BOOL)dealData:(NSString *)sql params:(NSArray *)params
{
    sqlite3 *sqlite3 = nil;
    if (sqlite3_open([[self filePath] UTF8String], &sqlite3) != SQLITE_OK){
        NSLog(@"打開數據庫失敗");
        //sqlite3_close(sqlite3);
        return NO;
    }
    //數據操作句柄
    sqlite3_stmt *stmt = nil;
    if (sqlite3_prepare_v2(sqlite3, [sql UTF8String], -1, &stmt, NULL) != SQLITE_OK){
        NSLog(@"sql語句編譯失敗");
        sqlite3_close(sqlite3);
        return NO;
    }
    //綁定數據
    if (params != nil){
        for (int i = 0; i < [params count]; i ++){
            sqlite3_bind_text(stmt, i + 1, [[params objectAtIndex:i] UTF8String], -1, NULL);
        }
    }
    //執行查詢
    if (sqlite3_step(stmt) == SQLITE_ERROR){
        NSLog(@"sql語句執行失敗");
        sqlite3_close(sqlite3);
        return NO;
    }
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite3);
    return YES;
}

- (NSMutableArray *)queryData:(NSString *)sql params:(NSArray *)params
{
    sqlite3 *sqlite3 = nil;
    if (sqlite3_open([[self filePath] UTF8String], &sqlite3) != SQLITE_OK){
        NSLog(@"打開數據庫失敗");
        return nil;
    }
    //數據庫句柄
    sqlite3_stmt *stmt = nil;
    if (sqlite3_prepare_v2(sqlite3, [sql UTF8String], -1, &stmt, NULL) != SQLITE_OK){
        NSLog(@"sql語句編譯失敗");
        sqlite3_close(sqlite3);
        return nil;
    }
    //綁定參數
    if (params != nil){
        for (int i = 0; i < [params count]; i ++){
            sqlite3_bind_text(stmt, i + 1, [[params objectAtIndex:i] UTF8String], -1, NULL);
        }
    }
    //執行查詢
    int result = sqlite3_step(stmt);
    int columns = sqlite3_column_count(stmt);
    NSMutableArray *list = [[NSMutableArray alloc]init];
    while (result == SQLITE_ROW){
        NSMutableArray *row = [[NSMutableArray alloc]init];
        for (int i = 0; i < columns; i ++){
            [row addObject:[NSString stringWithCString:(char *)sqlite3_column_text(stmt, i) encoding:NSUTF8StringEncoding]];
        }
        [list addObject:row];
        result = sqlite3_step(stmt);
    }
    //關閉資源
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite3);
    return list;
}
@end


發佈了65 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章