【问题标题】:SQLite: DB error, "out of memory"SQLite:数据库错误,“内存不足”
【发布时间】:2011-08-18 23:35:53
【问题描述】:

我正在使用 FMDB 创建记录并将其添加到 d/b。创建d/b的方法是:

//-----------------------    checkIfDatabaseExists    -----------------|
+ (void) openCreateDB  {

    NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  // Get the path to the database file
    NSString *documentPath = [searchPaths objectAtIndex:0];
    NSString *databasePath = [documentPath stringByAppendingPathComponent:@"ppcipher.s3db"];
    NSLog(@"d/b path: /%@", databasePath);

    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_name TEXT NOT NULL, "
         @"card_type TEXT, code_val TEXT, create_date TEXT DEFAULT CURRENT_DATE, user_notes TEXT, gps_loc TEXT)"];

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

这不会导致错误。但是,当我接下来在“打开”之后执行一 (1) 个“插入”时,我从 FMDB 收到一条错误消息,提示 DB 错误:7“内存不足”。在此之后的每个 sql 语句,我都会得到同样的错误(只有 d/b 的创建没有给出错误!)。这是插入的代码:

//---------------------    addRecordToDatabase    ----------------------|
+ (void)addRecordToDatabase: (ZBarSymbol *)symbol  {


    FMDatabase* _db = [FMDatabase sharedFMDatabase];

    [_db setLogsErrors:1];  //  log all of the SQLite d/b errors

    [_db executeUpdate: @"INSERT INTO CardData (card_id, card_name, code_val) VALUES (?, ?, ?)", symbol.data, @"Test Card", symbol.typeName, nil];

}

这是一个非常小的 d/b,数据最少。我跑了 Inspector,没有什么不寻常的。任何建议将不胜感激。

【问题讨论】:

    标签: objective-c sqlite fmdb


    【解决方案1】:

    我认为你应该在你的代码中调用[_db open],这应该可以解决它。似乎FMDB中的“内存不足错误”也意味着由于缺少表或连接未打开而导致的错误。

    【讨论】:

    • 谢谢...我认为它做到了...(这是一张丢失的桌子)。
    • 我做了类似的疏忽,但错误消息很糟糕。
    • 你真的帮了我很多。愚蠢的消息
    猜你喜欢
    • 2014-10-11
    • 2018-05-05
    • 1970-01-01
    • 2013-08-21
    • 2017-07-19
    • 1970-01-01
    • 2016-09-01
    • 2015-09-20
    相关资源
    最近更新 更多