首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行在ns线程上的iPhone Sqlite插入件

运行在ns线程上的iPhone Sqlite插入件
EN

Stack Overflow用户
提问于 2012-08-14 06:41:38
回答 1查看 275关注 0票数 0

我正在开发一个应用程序,在这个应用程序中,我需要将大量的数据插入到sqlite数据库中。数据被正确插入,但问题是,有时我会得到一个异常

代码语言:javascript
复制
Assertion failure in -[AttendeeDetails addData:anddbpath:], /Users/abhisheknaidu/Desktop/EventApp/AttendeeDetails.m:118
2012-08-14 11:54:24.937 EventApp[3586:1770b] 

* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error while creating add statement. 'SQL logic error or missing database''

这种事只发生过几次。

这里有人能帮我吗..。

我使用下面的代码插入

代码语言:javascript
复制
- (void) addData:(NSMutableArray *)attendeeArray anddbpath:(NSString *)dbPath{

    NSString *str = @"Not Available";
    if(addStmt == nil) {
          if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

        const char *sql = "insert into AttendeeDetails(AtQRid , EventId , ImageUrl , FirstName , LastName , Company , Email , PhoneNumber , City , State , ATBarcodeID) Values(?,?,?,?,?,?,?,?,?,?,?)";
        if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
        }
        sqlite3_bind_text(addStmt, 1, [[attendeeArray valueForKey:@"Attendee_QR_ID"] UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(addStmt, 2, [[[[AppDelegate SharedInstance].DetailsOfEventArray valueForKey:@"Event_ID"] objectAtIndex:0] UTF8String], -1, SQLITE_TRANSIENT);
        if ([attendeeArray valueForKey:@"Image_URL"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 3, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 3, [[attendeeArray valueForKey:@"Image_URL"] UTF8String], -1, SQLITE_TRANSIENT);
        }
        sqlite3_bind_text(addStmt, 4, [[attendeeArray valueForKey:@"FirstName"] UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(addStmt, 5, [[attendeeArray valueForKey:@"LastName"] UTF8String], -1, SQLITE_TRANSIENT);
        if ([attendeeArray valueForKey:@"Company"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 6, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 6, [[attendeeArray valueForKey:@"Company"] UTF8String], -1, SQLITE_TRANSIENT);
        }

        if ([attendeeArray valueForKey:@"Email"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 7, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 7, [[attendeeArray valueForKey:@"Email"] UTF8String], -1, SQLITE_TRANSIENT);
        }

        if ([attendeeArray valueForKey:@"PhoneNo"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 8, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 8, [[attendeeArray valueForKey:@"PhoneNo"] UTF8String], -1, SQLITE_TRANSIENT);
        }


        if ([attendeeArray valueForKey:@"City"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 9, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 9, [[attendeeArray valueForKey:@"City"] UTF8String], -1, SQLITE_TRANSIENT);
        }

        if ([attendeeArray valueForKey:@"State"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 10, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 10, [[attendeeArray valueForKey:@"State"] UTF8String], -1, SQLITE_TRANSIENT);
        }

        if ([attendeeArray valueForKey:@"State"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 10, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 10, [[attendeeArray valueForKey:@"State"] UTF8String], -1, SQLITE_TRANSIENT);
        }


        if ([attendeeArray valueForKey:@"State"] == [NSNull null]) {
            sqlite3_bind_text(addStmt, 11, [str UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_text(addStmt, 11, [[attendeeArray valueForKey:@"State"] UTF8String], -1, SQLITE_TRANSIENT);
        }

        if(SQLITE_DONE != sqlite3_step(addStmt))
            NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
        else
            //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
            coffeeID = sqlite3_last_insert_rowid(database);

        //Reset the add statement.
        sqlite3_reset(addStmt);
    }
    addStmt = nil;

}

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2012-08-14 06:56:47

我想你可以使用调度队列

代码语言:javascript
复制
    dispatch_queue_t concurrentQueue =  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(concurrentQueue, ^{
      //this will call when you inserting in bg


        dispatch_async(dispatch_get_main_queue(), ^{
           //this will call when inserting  is finished
        });
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11947030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档