C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 如何使FMDB的数据库成为单例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在使用sqlite一段时间,并决定去FMDB.我需要让它成为一个单身人士.这是我下面的代码;我需要更改FMDB才能访问单例d / b?

#pragma mark Singleton Methods

+ (sqliteDB *) sharedsqliteDB  {

    if(!sharedsqliteDB)  {
        sharedsqliteDB = [[sqliteDB alloc] init];
        [sharedsqliteDB opencreatedb];  //  check to see if D/b exists
    }
    return sharedsqliteDB;
}

这是我用来使用FMDB初始化d / b的代码

//-----------------------    checkIfDatabaseExists    -----------------|
    - (void) opencreatedb  {

        searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);  // Get the path to the database file
        documentPath = [searchPaths objectATindex:0];
        databasePath = [documentPath StringByAppendingPathComponent:@"ppcipher.s3db"];
        cDatabasePath = [databasePath cStringUsingEncoding:NSUTF8StringEncoding];
        NSLog(@"d/b path: /%@",databasePath);

        NSString *sqlCommand = @"create table CardData (card_id TEXT PRIMary KEY NOT NULL,card_@R_82_4687@T NOT NULL,"
            @"card_type TEXT,code_val TEXT,create_date text DEFAULT CURRENT_DATE,user_notes TEXT,gps_loc TEXT)"; 
        char * errmsg = nil;   

        NSFileManager *fileManager = [NSFileManager defaultManager];
        [fileManager removeItemAtPath:databasePath error:NULL];  //  <------------  delete d/b  TESTinG ONLY! 

        BOOL fileExists = [fileManager fileExistsAtPath:databasePath];
        if(!fileExists)  {
            FMDatabase* db = [FMDatabase databaseWithPath: databasePath]; 

            if (![db open]) {
                NSLog(@"Could not open/create database");
            }

            [db executeupdate:@"create table CardData (card_id TEXT PRIMary KEY NOT NULL,"
             @"card_type TEXT,gps_loc TEXT)"];

            if(errmsg != nil)
                NSLog(@"error: %s",errmsg);  //  DEBUGGING ONLY!  (REMOVE when done!)
        }
        return;
    }

解决方法

您的sqliteDB类需要维护对FMDatabase的引用,以便您的其他方法能够共享同一个数据库.

@interface sqliteDB : NSObject //Or whatever base class
{
    FMDatabase *_database;
}

@end

//implementation

- (void) opencreatedb  {
   ...
   if(!fileExists)  {
      _database = [[FMDatabase databaseWithPath: databasePath] retain];
   ...
   }
}

大佬总结

以上是大佬教程为你收集整理的objective-c – 如何使FMDB的数据库成为单例全部内容,希望文章能够帮你解决objective-c – 如何使FMDB的数据库成为单例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。