繁体   English   中英

iPhone FMDB / SQLite更新查询不起作用

[英]iphone FMDB / SQLite Update Query doesn't work

我尝试使用SQL包装器(FMDB)在表中进行更新。 插入方法还可以,当我尝试更新表中的数据时会出现问题。

- (void)saveUserMoneyValidation:(UserDebtInfo *)entities
{
    NSLog(@"entities.client_index = %d", entities.client_index);

    [self deleteUserMoneyValidation:entities.client_index];

    FMDatabase *newdb = [FMDatabase databaseWithPath:databasePathStore];

    [newdb setLogsErrors:TRUE];
    [newdb setTraceExecution:FALSE];

    if (![newdb open])
    { 
        NSLog(@"!!! Could not open db."); 
        return; 
    }
    else 
    { 
        NSLog(@"DB Open successfuly."); 
    }

    [newdb beginTransaction];
    NSLog(@"entities = %@",entities);

    [newdb executeUpdate:@"INSERT INTO MoneyValidation (client_index, client_name, sum, duration, monthly_payment, payment_type, debt_type, debt_code, categoryType) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
    [NSNumber numberWithInt:entities.client_index],
     entities.client_name,
     entities.sum,
     entities.duration,
     entities.monthly_payment,
     entities.payment_type,
     entities.debt_type,
     [NSNumber numberWithInt:entities.debt_code],
     entities.categoryType
     ];

    [newdb commit];
    [newdb close];
}

更新方法:

   -(void)updateUserMoneyValidation:(UserDebtInfo *)entities{
NSLog(@"entities.client_index = %d", entities.client_index);

FMDatabase *newdb = [FMDatabase databaseWithPath:databasePathStore];

[newdb setLogsErrors:TRUE];
[newdb setTraceExecution:FALSE];

if (![newdb open])
{ 
    NSLog(@"!!! Could not open db."); 
    return; 
}
else 
{ 
    NSLog(@"DB Open successfuly."); 
}

BOOL success = NO;

[newdb beginTransaction];
NSLog(@"entities = %@",entities);

success = [newdb executeUpdate:@"UPDATE MoneyValidation SET client_name = ?, sum = ?, duration = ?, monthly_payment = ?, payment_type = ?, debt_type = ?, debt_code = ?, categoryType = ?  WHERE client_index = %d;", entities.client_name, entities.sum, entities.duration, entities.duration, entities.monthly_payment, entities.payment_type, entities.debt_type, entities.debt_code, entities.categoryType, entities.client_index];

if (success)
{
    NSLog(@"OK");
    [db commit];
    [db close];
}
else 
{
    NSLog(@"FAIL");
}

NSLog(@"OBJ - %@", entities);}

表结构:

CREATE TABLE MoneyValidation (ID INTEGER PRIMARY KEY, client_index INTEGER, client_name TEXT, sum TEXT, duration TEXT, monthly_payment TEXT, payment_type TEXT, debt_type TEXT, debt_code INTEGER, categoryType TEXT)
  • client_index是唯一的代码;

    有人可以帮我一些有关此问题的建议吗? 谢谢!

我认为问题出在您的更新声明中。 传递给“ executeUpdate”的所有值都应该是对象。

在您更新SQL语句, entities.debt_codeentities.client_index正在为整数过去了,你需要将它们传递作为NSNumber的对象。

请尝试以下操作:

success = [newdb executeUpdate:@"UPDATE MoneyValidation 
           SET client_name = ?, sum = ?, 
           duration = ?, monthly_payment = ?, 
           payment_type = ?, debt_type = ?, 
           debt_code = ?, categoryType = ?  
           WHERE client_index = %d;", 

          entities.client_name, entities.sum, 
          entities.duration, entities.duration, 
          entities.monthly_payment, entities.payment_type, 
          entities.debt_type, 
          [NSNumber numberWithInt:entities.debt_code],  // Convert int to object type
          entities.categoryType, 
          [NSNumber numberWithInt:entities.client_index] // Convert int to object type
          ];

将您的更新SQL放入NSString中,以便可以在NSLog中输出它,并查看是否存在问题。 还要检查FMDatabase对象上的lastError属性-如果它不为零,则NSLog同一对象的lastErrorMessage属性以查看FMDB抱怨什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM