你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> SQLite被鎖定處理方法

SQLite被鎖定處理方法

編輯:IOS開發綜合

第一次在項目中遇到運用SQLite,之前寫Android的時分異樣的流程沒有出錯。
Android對SQLite的”增刪改查”——SQLiteDatabase
Android SQLite操作之“SQLiteOpenHelper”
這裡也能夠我只是寫了一個Demo,就一個頁面,所以沒有發現那個錯誤。但是IOS的APP我是多處運用SQLite,而且我是把SQLite的操作寫在Controller之外以接口方式運用的。
於是在頁面跳轉往復的進程中呈現了SQLite被鎖定的狀況。查了一些材料:SQLite只能支持單線程,或許說SQLite不能被同時登錄。於是我查了一下我寫的函數,每個都是翻開數據庫開端,封閉數據庫開頭,明著看沒什麼問題。後來急著上線,就寫了單例形式去訪問數據庫,最終處理問題。
DBSQLite.m關鍵代碼:

+ (DBSQLite *)sharedDataBaseHandle
{
    static DBSQLite *manager = nil;
    if (manager == nil) {
        manager = [[DBSQLite alloc] init];
    }
    return manager;
}
static sqlite3 * db = nil;  //設置句柄 經過句柄對數據庫停止操作
-(sqlite3 *)openDB
{
    if (db != nil) {
        return db;
    }
    NSArray *test = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString * fileName = [[test lastObject]stringByAppendingPathComponent:@"dbname.db"];
    sqlite3_open(fileName.UTF8String, &db);
    return db;
}

封閉SQLite

-(void)closeDB
{
    if (sqlite3_close(db) == SQLITE_OK){
        db = nil;
    } else {}
}

這樣保證db只被實例化一次,經過db這個句柄完成對SQLite的操作。
最後Controller中調用

DBSQLite * db = [DBSQLite sharedDataBaseHandle];
[_db.functionname()];

詳細對SQLite的操作和代碼正文可以參考IOS SQLite3 “增刪改查”(Objective-C)

【SQLite被鎖定處理方法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

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