2013-08-27 34 views
1

我试图从数组中插入批处理数据到我的移动项目的Sqlite3中。用数组添加批处理值

我的代码似乎工作正常,但它并没有插入所有的数据。

PS:我修改了代码:

 -(BOOL) saveBatchData:(NSArray *)userSourceID userDestID:(NSArray *)userDestID message:(NSArray *)message sentDate:(NSArray *)sentDate 
{ 
    const char *dbpath = [databasePath UTF8String]; 
    if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
    { 
     for(int i=0; i<[message count]; i++) 
     { 

      NSString *insertSQL = [NSString stringWithFormat:@"insert into messages (userSourceID,userDestID, message, sentDate) values (\"%d\",\"%d\", \"%@\",\"%@\")",[[userSourceID objectAtIndex:i] integerValue],[[userDestID objectAtIndex:i] intValue], [message objectAtIndex:i],[sentDate objectAtIndex:i]]; 

      const char *insert_stmt = [insertSQL UTF8String]; 

      sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL); 

      if (sqlite3_step(statement) == SQLITE_DONE) 
      { 
       sqlite3_finalize(statement); 

       return YES; 

      } else { 

       NSLog(@"Hata = %s",sqlite3_errmsg(database)); 

       return NO; 
      } 

      sqlite3_reset(statement); 

     } 

     sqlite3_close(database); 

    } 

    return NO; 
} 

输出似乎是,功能只是增加了对数组的元素39几行(我认为这是4)。有人可以帮助我什么是我的错误在这里?

Regards ...

回答

1

您正在准备大量的语句,但只执行最后一个语句。

将呼叫转移到sqlite3_step进入循环。

请注意,您必须致电sqlite3_finalize以了解您准备好的每一项声明,而不管该步骤是否成功。

如果不调用sqlite3_close,则不能跳出该功能。

声明完成后,您不能致电sqlite3_reset

+0

你救了我的命:)谢谢你的帮助:) –

+0

还有一个问题,sqlite3_reset也在功能范围内..你的意思是把它移到for循环中? –

+0

I.已编辑我的代码。 –