Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.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
Ios 我的更新功能有什么问题?在sqlite数据库锁定错误后完全更新了吗?_Ios_Sqlite_Thread Safety - Fatal编程技术网

Ios 我的更新功能有什么问题?在sqlite数据库锁定错误后完全更新了吗?

Ios 我的更新功能有什么问题?在sqlite数据库锁定错误后完全更新了吗?,ios,sqlite,thread-safety,Ios,Sqlite,Thread Safety,当我运行应用程序时,该函数是否能完美工作?没有任何问题,但数据库被锁定后的功能?功能有什么问题请给我解决方案 我有很多表,所以在关闭数据库后,当所有时间戳更新时,我会在函数中打开数据库一次 下面是bindSQL函数 - (void) updateTimeStamp:(NSDictionary *) record forRowID: (NSString *) updateTableName { int dictionarySize = [record count]; NSMutabl

当我运行应用程序时,该函数是否能完美工作?没有任何问题,但数据库被锁定后的功能?功能有什么问题请给我解决方案

我有很多表,所以在关闭数据库后,当所有时间戳更新时,我会在函数中打开数据库一次

下面是bindSQL函数

- (void) updateTimeStamp:(NSDictionary *) record forRowID: (NSString *) updateTableName
  {
    int dictionarySize = [record count];

NSMutableData *dKeys = [NSMutableData dataWithLength:sizeof(id) *dictionarySize];

NSMutableData * dValues = [NSMutableData dataWithLength: sizeof(id) * dictionarySize];
[record getObjects:(__unsafe_unretained id *)dValues.mutableBytes andKeys:(__unsafe_unretained id *)dKeys.mutableBytes];

[dValues appendBytes:&updateTableName length:sizeof(id)];

NSString * query = [NSString stringWithFormat:@"update %@ set %@ = ? where  Table_Name= ?",tableName,[[record allKeys] componentsJoinedByString:@" = ?, "]];
[self bindSQL:[query UTF8String] withVargs:(va_list)dValues.mutableBytes];


if(sqlite3_step(statment) == SQLITE_DONE);
{
     NSLog(@"prepead Timestamp %s",sqlite3_errmsg(database));
}
sqlite3_reset(statment);
@synchronized(self)
{

    if(sqlite3_finalize(statment) != SQLITE_OK)
    {
        NSLog(@"doQuery: sqlite3_finalize failed (%s)", sqlite3_errmsg(database));

    }

}

 }

此代码创建两个语句对象:

  - (void) bindSQL:(const char *) cQuery withVargs:(va_list)vargs
  {
    int param_count;

NSLog(@"%d",sqlite3_prepare_v2(database, cQuery, -1, &statment, NULL));
if(sqlite3_prepare_v2(database, cQuery, -1, &statment, NULL) != SQLITE_OK)
{
    NSLog(@"bindSQL: could not prepare statement (%s) %s", sqlite3_errmsg(database), cQuery);
    statment = NULL;
    return;
}

if((param_count = sqlite3_bind_parameter_count(statment)))
{
    for(int i =0; i < param_count ;i++)
    {
        id object = va_arg(vargs,id);

        if(object == nil)
        {
            sqlite3_bind_null(statment, i+1);
        }
        else if ([object respondsToSelector:@selector(objCType)])
        {
            if(strchr("islqISLBQ", *[object objCType]))
            {
                sqlite3_bind_int(statment, i+1, [object intValue]);
            }
            else if (strchr("fd", *[object objCType]))
            {
                sqlite3_bind_double(statment, i+1, [object doubleValue]);
            }
            else
            {
                NSLog(@"bindSQL: Unhandled objCType: %s query: %s", [object objCType], cQuery);
                statment = NULL;
                return;
            }
        }
        else if ([object respondsToSelector:@selector(UTF8String)])
        {
            sqlite3_bind_text(statment, i+1, [object UTF8String], -1, SQLITE_TRANSIENT);
        }
        else if ([object isEqual:[NSNull null]])
        {
            statment = NULL;
            return;
        }
        else
        {
            NSLog(@"bindSQL: Unhandled parameter type: %@ query: %s", [object class], cQuery);
            statment = NULL;
            return;
        }
    }
}

va_end(vargs);
return;
 }
其中只有一个是后来定稿的

如果要检查返回代码,最好使用变量:

NSLog(@"%d",sqlite3_prepare_v2(database, cQuery, -1, &statment, NULL));
if(sqlite3_prepare_v2(database, cQuery, -1, &statment, NULL) != SQLITE_OK)

WTF是否继续使用该代码?此代码工作正常,您不了解的内容@TrojanFoetIt是疯狂的。显示bindSQL代码。我正在添加bindSQL函数@CL。发生了相同的数据库锁定错误。我打开关闭数据库,我检查了很多次。我的代码中没有出现的问题@氯。
int rc = sqlite3_prepare_v2(database, cQuery, -1, &statment, NULL);
NSLog(@"%d", rc);
if (rc != SQLITE_OK)