值在数据库中插入两次

时间:2013-10-28 10:18:09

标签: ios uiwebview insert sqlite

我有UIWebView用于显示HTML文章页面。我使用UILongPressGesture获取触摸位置坐标。我将这些坐标保存到数据库中。但是在数据库中插入两次的保存值。为什么呢?

- (void)tapTest:(UILongPressGestureRecognizer *)sender {
    NSLog(@"coordinate is %f %f", [sender locationInView:wbCont.scrollView].x, [sender locationInView:wbCont.scrollView].y);


     xcor = [sender locationInView:wbCont.scrollView].x;
     ycor = [sender locationInView:wbCont.scrollView].y;


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    // NSString *documentsDirectory = [paths objectAtIndex:1];

    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"os.sqlite"];
    NSLog(@"filepath %@",path);


    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

        const char *sql = [[NSString stringWithFormat:@"SELECT xcoor FROM touch where xcoor = '%f','%f'",xcor,ycor] cStringUsingEncoding:NSUTF8StringEncoding];

        NSLog(@"sql is %s",sql);

        BOOL favExist = false;

        sqlite3_stmt *statement, *addStmt;

        if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
            // We "step" through the results - once for each row.
            while (sqlite3_step(statement) == SQLITE_ROW) {



                favExist = true;
            }
        }


        if(!favExist){



            const char *sqlInsert = [[NSString stringWithFormat:@"insert into touch (xcoor,ycoor) values ('%f','%f')", xcor,ycor] cStringUsingEncoding:NSUTF8StringEncoding];

            NSLog(@"sql insert is %s",sqlInsert);


            // [catID release];

            if(sqlite3_prepare_v2(database, sqlInsert, -1, &addStmt, NULL) != SQLITE_OK)
                NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

            NSLog(@"error is %s",sqlite3_errmsg(database));

            if(SQLITE_DONE != sqlite3_step(addStmt))
                NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));


        }else {


        }

    }

}

enter image description here

1 个答案:

答案 0 :(得分:1)

只需像这样更改您的选择查询

const char *sql = [[NSString stringWithFormat:@"SELECT xcoor FROM touch where xcoor = '%f' AND ycoor = '%f'",xcor,ycor] cStringUsingEncoding:NSUTF8StringEncoding];

因此,您需要在WHERE条件中使用AND opertion来检查x和y坐标