在iOS中使用SQLite3插入语句期间出错

时间:2013-04-14 17:25:15

标签: ios objective-c sqlite insert

我正在尝试在iOS应用中的SQLite 3数据库中插入一些数据。但我一直收到一个对我无用的错误。

这是我的代码试图插入:

 @try {
        NSString *dbPath = [self.GetDocumentDirectory stringByAppendingPathComponent:@"knhb.sqlite"];
        BOOL success = [fileMgr fileExistsAtPath:dbPath];
        if(!success)
        {
            NSLog(@"Cannot locate database file '%@'.", dbPath);
        }
        if((sqlite3_open_v2([dbPath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK))
        {
            NSLog(@"An error has occured.");
        }


        NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO Profile (name, password) VALUES ('%@','%@')", name, password];

        const char *sql = [sqlString UTF8String];

        sqlite3_stmt *sqlStatement;

        if(sqlite3_prepare_v2(db, sql, 1, &sqlStatement, NULL) != SQLITE_OK)
        {
            NSLog(@"%s SQLITE_ERROR '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(db), sqlite3_errcode(db));
        }

        sqlite3_step(sqlStatement);
        sqlite3_finalize(sqlStatement);

        int lastInsert = sqlite3_last_insert_rowid(db);
        NSLog(@"lastinsertid:%d", lastInsert);

        sqlite3_close(db);
    }
    @catch (NSException *exception) {
        NSLog(@"An exception occured: %@", [exception reason]);
    }

我的数据库表Profile有三列idProfile,名称和密码。但由于idProfile是一个int和主键,我不必包含它,因为它是自动递增的。

我一直得到的错误是:SQLITE_ERROR'靠近“I”:语法错误'(1)

我正在写入Documents文件夹。

非常感谢任何帮助。

大安

1 个答案:

答案 0 :(得分:1)

我不太清楚为什么,但我通过更改以下代码行来修复它:

if(sqlite3_prepare_v2(db, sql, 1, &sqlStatement, NULL) != SQLITE_OK)

我把它变成了:

if(sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)

不确定1或-1的含义。也许有人可以详细说明?

干杯!