第一次在項目中遇到運用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被鎖定處理方法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!