SQlite3(輕型數據庫)

這裏寫圖片描述

1. main.m文件

#import <Foundation/Foundation.h>
#import "SQLManger.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        SQLManger* sql = [SQLManger shareSqlManger];
        [sql createTable];
        //查
        [sql selectMessage];
        //增
//        [sql IncreaseMessage];
        //刪
//        [sql DeleteMessage];  
        //改
        [sql changeMessage];
    }
    return 0;
}

2. SQLManger.h 文件

#import <Foundation/Foundation.h>
#import <sqlite3.h>

@interface SQLManger : NSObject
{
    sqlite3* db;//聲明數據庫對象
}

//類方法單例創建實例對象的方法
+(SQLManger*)shareSqlManger;
//創建數據表
-(void)createTable;
//查詢數據表數據
-(void)selectMessage;
//增加數據表數據
-(void)IncreaseMessage;
//刪除數據表數據
-(void)DeleteMessage;
//改變數據表數據
-(void)changeMessage;
@end

3. SQLManger.m 文件

#import "SQLManger.h"

//聲明一個全局的靜態變量,來記錄SQLManger對象是否被創建(定義一個靜態區指針 連接數據庫 讓數據庫再程序結束後自動釋放)
static SQLManger* sqlManger = nil;

@implementation SQLManger

//類方法單例創建實例對象的方法
+(SQLManger*)shareSqlManger
{
    if (sqlManger == nil) {
        sqlManger = [[SQLManger alloc]init];
    }
    return sqlManger;
}


//創建數據表
-(void)createTable
{
//    //獲取文件的相對路徑
//    NSString* path = [[NSBundle mainBundle]pathForResource:@"nibaba" ofType:@"sqkute"];
//    //讀取plist文件的內容
//    NSArray* arr = [NSArray arrayWithContentsOfFile:path];
//    NSLog(@"arr == %@", arr);

//    //獲取家目錄
//    NSString* homePath = NSHomeDirectory();
//    NSLog(@"家目錄:%@",homePath);
//    //獲取Documents路經
//    NSArray* pathArr1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    NSString* docuPath = [pathArr1 objectAtIndex:0];
//    NSLog(@"Documents路徑:%@",docuPath);
//    NSString* path = [docuPath stringByAppendingPathComponent:docuPath];
//    NSLog(@"path == %@", path);
//    //這個只限於IOS應用在mac應用中就不適應

//    //獲取數據庫路徑
//    NSString* path = @"/Users/user/Downloads/數據庫";
//    //文件管理器
//    NSFileManager* fileManager = [NSFileManager defaultManager];
//    //判斷數據庫是否存在
//    BOOL fild = [fileManager fileExistsAtPath:path];
//    
//    ////如果數據庫存在,則用sqlite3_open直接打開(不要擔心,如果數據庫不存在sqlite3_open會自動創建)
//    if (fild) {
//        NSLog(@"文件庫存在。。。。");
//    }else{
//        NSLog(@"文件庫不存在。。。");
//    }

    //獲取數據庫路徑
    NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
    //打開數據庫
    //第一個參數是數據庫的路徑,c的字符串類型
    //第二個參數是數據庫的對象
    //SQLITE_OK 是宏定義代表語句操作成功
    if (sqlite3_open([path UTF8String], &db) == SQLITE_OK) {
        //NSString* createTable = @"CREATE TABLE IF NOT EXISTS STUDENT (sid text primary key,name text)";
        NSString* createTable=@"CREATE TABLE IF NOT EXISTS STUDENG  (SID TEXT PRIMARY KEY,NAME TEXT);";
        //執行創建表的aql語句
        //第一個參數是數據庫的對象
        //第二個參數是sql語句,c的字符串類型
        //第三個參數是回調方法
        //第四個參數是回調方法的參數
        //第五個參數是錯誤信
        char* error;
        //sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
        if (sqlite3_exec(db, [createTable UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSAssert(YES, @"數據表格創建成功%s", error);
            NSLog(@"數據表格創建成功");
        }else{
            NSAssert(NO, @"數據表格創建失敗%s", error);
            NSLog(@"數據表格創建失敗");
        }
        //關閉數據庫
        sqlite3_close(db);

    }

}

//查詢數據表數據
-(void)selectMessage
{
    //獲取數據庫路徑
    NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
    //打開數據庫
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        //? 是佔位符
        NSString* selectSql = @"select *from areaCode where id=?";
        //創建語句對象
        sqlite3_stmt* stmt;

        //執行sql語句的預處理
        //第一個參數是數據庫對象
        //第二個參數是執行的sql語句
        //第三個參數是語句的執行長度,-1代表全部執行
        //第四個參數是語句對象
        //第五個參數是沒有執行的部分,一般會全部執行,一般填nil
        sqlite3_prepare_v2(db, [selectSql UTF8String], -1, &stmt, NULL);

        //綁定參數,並實現查找
        //第一個參數是語句對象
        //第二個參數是語句編號,從1開始
        //第三個參數是所要綁定參數的值
        sqlite3_bind_int(stmt, 1, 10);

        //獲取查詢出來的值
        if (sqlite3_step(stmt) == SQLITE_ROW) {
            //獲取一行數據有多少列
            NSLog(@" ====== %d", sqlite3_column_count(stmt));
            char* s = (char*)sqlite3_column_text(stmt, 1);
            NSLog(@" ------ %@",[NSString stringWithFormat:@"%s", s]);
            //獲取ID的值
            NSLog(@"------%d",sqlite3_column_int(stmt, 0));
            sqlite3_finalize(stmt);//釋放語句
        }else{
            sqlite3_finalize(stmt);//釋放語句
            sqlite3_close(db);
        }
    }else{
        sqlite3_close(db);
    }
}

//增加數據表數據
-(void)IncreaseMessage
{
    //獲取數據庫路徑
    NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
    //打開數據庫
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        NSString *increase = @"insert into areaCode(id,location,countryCodeID) values (1,'鎮魂街',02)";
        char* error;
        //sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
        if (sqlite3_exec(db, [increase UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSLog(@"增加數據表數據成功");
        }else{
            NSLog(@"增加數據表數據失敗 == %s", error);
        }
    }
}

//刪除數據表數據
-(void)DeleteMessage
{
    //獲取數據庫路徑
    NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
    //打開數據庫
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        //刪除id爲1的一行數據,如果要刪兩行就 id = 1 or id = 10 ,刪除id爲1和10行的數據
        NSString *Delete = @"delete from areaCode  where id = 1";
        char* error;
        //sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
        if (sqlite3_exec(db, [Delete UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSLog(@"刪除數據表數據成功");
        }else{
            NSLog(@"刪除數據表數據失敗 == %s", error);
        }
    }
}

//改變數據表數據
-(void)changeMessage
{
    //獲取數據庫路徑
    NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
    //打開數據庫
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        NSString *change = @"update areaCode set location = '鎮魂街' WHERE id = 1";
        char* error;
        //sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
        if (sqlite3_exec(db, [change UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSLog(@"改變數據表數據成功");
        }else{
            NSLog(@"改變數據表數據失敗 == %s", error);
        }
    }
}

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