准备插入语句时SQLite内存不足

时间:2009-12-13 16:15:59

标签: iphone ios database sqlite insert

我的应用程序出现问题,它打开此数据库并从中选择行,确定

然后当我想使用以下代码添加新行时,我总是在执行prepare_V2时遇到以下问题。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error while creating add statement. 'out of memory''

代码是.....

static sqlite3 *database = nil;                 
static sqlite3_stmt *addStmt = nil; 


- (BOOL)addUserprofile {

    addStmt = nil;  // set to force open for testing
    database = nil; // set to force creation of addstmt for testing

    if (database == nil) {  // first time then open database
        NSString *databaseName = @"UserProfile.db";
        // Use editable database paths
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];   
        NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
        NSLog(@"path = %@",databasePath);

        NSLog(@"opening Database");
        sqlite3 *database;
        // Open the database from the users filessytem
        if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
            NSLog(@"Database Open");
            }
        else {
            NSLog(@"Database did not open");
        }

    }

    if(addStmt == nil) {

NSLog(@"Creating add stmt");
        const char *sql = "INSERT INTO Profile (ProfileName) VALUES(?)";

    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) {
            NSAssert1(0, @"** Error while creating add statement. '%s'", sqlite3_errmsg(database));
            success = NO;
            return success;
        }
    }
    sqlite3_bind_text(addStmt, 1, [ProfileName UTF8String], -1, SQLITE_TRANSIENT);

1 个答案:

答案 0 :(得分:1)

有时,您的数据库是SQLITE_BUSYSQLITE_LOCKED

您可以参考此框架了解如何操作: https://github.com/ccgus/fmdb

祝你好运!:)