2013-08-27 36 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.已編輯我的代碼。 –