Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone sqlite3数据库的奇怪问题(只能写入一次)_Iphone_Sqlite_Ios4 - Fatal编程技术网

Iphone sqlite3数据库的奇怪问题(只能写入一次)

Iphone sqlite3数据库的奇怪问题(只能写入一次),iphone,sqlite,ios4,Iphone,Sqlite,Ios4,我在iphonesdk4上的sqlite3数据库有一个很大的问题。我只能写/读数据库一次!有了iPhoneSDK3.2,一切都很好 第一次尝试后,我收到错误消息SQLITE\u BUSY 以下是我使用的代码片段: -(void) addFavoriteOdv:(Odv*)odv name:(NSString*)name; { @synchronized(self) { if(name == nil) name = odv.name;

我在iphonesdk4上的sqlite3数据库有一个很大的问题。我只能写/读数据库一次!有了iPhoneSDK3.2,一切都很好

第一次尝试后,我收到错误消息SQLITE\u BUSY

以下是我使用的代码片段:

-(void) addFavoriteOdv:(Odv*)odv name:(NSString*)name;
{
    @synchronized(self)
    {
        if(name == nil)
            name = odv.name;

        NSString* rowId = [self addOdv:odv];

        int existing = [self numberOfFavoriteOdvs:rowId];
        if(existing == 0)
        {
            sqlite3 *database = [self getOpenDatabase];

            const char *insertStatement = [@"insert into favoriteodvs(odv, name) values (?, ?)" UTF8String];

            int retCode = 0;
            sqlite3_stmt *statement;
            retCode = sqlite3_prepare_v2(database, insertStatement, -1, &statement, NULL);

            if(retCode == SQLITE_OK)
            {
                sqlite3_bind_text(statement, 1, [rowId UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(statement, 2, [name UTF8String], -1, SQLITE_TRANSIENT);

                if(sqlite3_step(statement)!= SQLITE_DONE)
                {
                    NSLog(@"SQL Error: %s", sqlite3_errmsg(database));
                    NSLog(@"Inserting FavoriteOdv failed");
                }
            }

            sqlite3_finalize(statement);
            sqlite3_close(database);
        }
    }
}
有人有主意吗?我使用libsqlite3.dylib

谢谢,
塞巴斯蒂安

要重复使用您准备好的声明,您必须致电

sqlite3_reset(statement);
在收到sqlite3\u步骤中完成的SQLITE\u之后。之后,您可以绑定另一个数据并再次运行查询

p、 美国错了:

const char *insertStatement = [@"insert into favoriteodvs(odv, name) values (?, ?)" UTF8String];
正确:

const char *insertStatement = "insert into favoriteodvs(odv, name) values (?, ?)";

你能在评论中粘贴警告信息吗。