sqlite3_prepare_v2字符限制?

时间:2009-12-11 23:14:33

标签: iphone objective-c cocoa sqlite

我将数据存储在sqlite3数据库中,并且有几个地方可以读取数据和从数据库写入数据。我遇到的问题是,如果SQL语句变得很长,sqlite3_prepare_v2方法会返回错误。

此代码有效:

NSString *strSQL = @"UPDATE commandList SET displayName=?, type=?, formula=?, controlButton=?, sort=? WHERE pk=?;";
const char *sql = [strSQL UTF8String];
if (sqlite3_prepare_v2(database, sql, -1, &dehydrate_statment, NULL) != SQLITE_OK) {
    NSLog(@"Error: failed to create update statement with message '%@'.", sqlite3_errmsg(database));
}

但是这段代码出错:

NSString *strSQL = @"UPDATE commandList SET displayName=?, type=?, formula=?, onFormula=?, offFormula=?, controlButton=?, sort=? WHERE pk=?;";
const char *sql = [strSQL UTF8String];
if (sqlite3_prepare_v2(database, sql, -1, &dehydrate_statment, NULL) != SQLITE_OK) {
    NSLog(@"Error: failed to create update statement with message '%@'.", sqlite3_errmsg(database));
}

注意唯一的区别是第1行。

2 个答案:

答案 0 :(得分:1)

当你说“代码出错”时,你真的应该发布错误。这样可以避免我们进行推测,或者不得不编写样本来重现您所获得的错误。

请参阅:http://www.sqlite.org/limits.html

SQLite确实限制了SQL语句的最大大小。 (这可以防止在嵌入式环境中运行时出现不良行为,但不会影响绑定到语句的值的大小。)

根据上面的代码,你不应该遇到这个大小限制,但很难说你正在遇到什么,因为样本+问题并不孤立。

答案 1 :(得分:0)

iPhone模拟器中不存在此问题,因此必须是其他内容。