2012-06-04 51 views
0

我想就像我的代碼如下方式使用:無法在SQLite的查詢關鍵詞,比如使用

-(void)getMatchedContacts{ 
if(sqlite3_open([[self GetDBPath] UTF8String], &database)== SQLITE_OK) { 
    NSMutableArray *arrFBContacts = [self getFBContacts]; 
    if([arrFBContacts count]>0){ 
     sqlite3_stmt *stmt; 
     for (MContact *mc in arrFBContacts){ 
      const char *sql = "select count(*) from contacts where fname LIKE '?' and lname LIKE '?'"; 
      if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) { 
       NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
      } 
      else{ 
       NSLog(@"%@",[NSString stringWithFormat:@"%@",mc.firstname]); 
       NSLog(@"%@",[NSString stringWithFormat:@"%@",mc.lastname]); 
       sqlite3_bind_text(stmt, 1, [[NSString stringWithFormat:@"%@",mc.firstname] UTF8String], -1, SQLITE_TRANSIENT); 
       sqlite3_bind_text(stmt, 2, [[NSString stringWithFormat:@"%@",mc.lastname] UTF8String], -1, SQLITE_TRANSIENT); 

       int count =0; 
       if(sqlite3_step(stmt) == SQLITE_ROW) { 
        count = sqlite3_column_int(stmt, 0); 
       } 
       sqlite3_reset(stmt); 
       if(count>0){ 
        const char *sql1 = "update fbContacts set matched = 1 where id = ?"; 
        if (sqlite3_prepare_v2(database, sql1, -1, &stmt, NULL) != SQLITE_OK) { 
         NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
        } 
        else { 
         sqlite3_bind_int(stmt, 1, mc.fblocalcontactid); 
         sqlite3_step(stmt); 
        } 
        sqlite3_reset(stmt); 
       } 
      } 
     } 
    } 
} 

}

但我不能夠得到從第一個SQL計數變量的任何值。任何人都可以幫助我在y程序中遇到什麼問題。

問候 潘卡

+0

而不是'const char * sql'(和sql1),你可以使用'NSString * sql = ...'並且在sqlite_prepare'[sql UTF8String]'中?另一個嘗試可能不是使用'bind'並將值直接放入sql中。 –

回答

0

您可以查看下面我的功能:在這方面,像查詢工作正常。

-(NSMutableArray *)getCategorySearchNoDueDate:(int)catId:(NSString *)searchWord{ 
searchWord = [@"%" stringByAppendingFormat:@"%@%%",searchWord]; 

NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 

oClsDBFunction = [[clsDBFunction alloc] init]; 

appDelegate = (WFAppDelegate *)[[UIApplication sharedApplication] delegate]; 
if (appDelegate.result == SQLITE_OK) { 
    const char *sql; 

    NSString *sqlString = @"SELECT \"Project\" as objectType, \"0\" as tID, projectId as pID, \"0\" as refTID, referenceId as refPID, " 
    "title as pTitle, \"\" as tTitle, description as Desc, " 
    "startDate as StartDate, startTime as StartTime, " 
    "dueDate as DueDate, dueTime as DueTime, compDate as CompDate, compTime as CompTime, " 
    "priorityId as PriorityId, categoryId as CategoryId, " 
    "isCompleted as IsCompleted, status as Status, isDeleted as IsDeleted, " 
    "remark as Remark, repeatId as RepeatId, alertCount as AlertCount, \"0\" as TaskType, " 
    "(select count(*) from tblTask, tblReference " 
    "where tblTask.referenceId=tblReference.referenceId and tblReference.projectId = tblProject.projectId) as TotalTask, " 
    "(select count(*) from tblTask, tblReference " 
    "where tblTask.referenceId=tblReference.referenceId and tblReference.projectId = tblProject.projectId and tblTask.isCompleted=1) " 
    "as CompletedTask " 
    "FROM tblProject " 
    "WHERE dueDate='' and " 
    "IsCompleted=0 and CategoryId=? and (tblProject.title like ? or tblProject.description like ?) " 
    "UNION " 

    "SELECT \"Task\" as objectType, tblTask.taskId as tID, \"0\" as pID, tblTask.referenceId as refTID, \"0\" as refPID, " 
    "\"\" as pTitle, title as tTitle, description as Desc, " 
    "\"\" as StartDate, \"\" as StartTime, " 
    "dueDate as DueDate, dueTime as DueTime, compDate as CompDate, compTime as CompTime, " 
    "priorityId as PriorityId, categoryId as CategoryId, " 
    "isCompleted as IsCompleted, status as Status, isDeleted as IsDeleted, " 
    "remark as Remark, repeatId as RepeatId, alertCount as AlertCount, taskTypeId as TaskType, " 
    "\"0\" as TotalTask, " 
    "\"0\" as CompletedTask " 
    "FROM tblTask, tblReference " 
    "WHERE IsCompleted=0 and " 
    "dueDate='' and " 
    "CategoryId=? and " 
    "tblTask.referenceId = tblReference.referenceId and tblReference.projectId=0 and (tblTask.title like ? or tblTask.description like ?) " 
    "UNION " 
    "SELECT \"Task\" as objectType, tblTask.taskId as tID, tblProject.projectId as pID, tblTask.referenceId as refTID, \"0\" as refPID, " 
    "tblProject.title as pTitle, tblTask.title as tTitle, tblTask.description as Desc, " 
    "\"\" as StartDate, \"\" as StartTime, " 
    "tblTask.dueDate as DueDate, tblTask.dueTime as DueTime, tblTask.compDate as CompDate, tblTask.compTime as CompTime, " 
    "tblTask.priorityId as PriorityId, tblTask.categoryId as CategoryId, " 
    "tblTask.isCompleted as IsCompleted, tblTask.status as Status, tblTask.isDeleted as IsDeleted, " 
    "tblTask.remark as Remark, tblTask.repeatId as RepeatId, tblTask.alertCount as AlertCount, taskTypeId as TaskType, " 
    "\"0\" as TotalTask, " 
    "\"0\" as CompletedTask " 
    "FROM tblTask, tblReference, tblProject " 
    "WHERE tblTask.IsCompleted=0 and " 
    "tblTask.dueDate='' and " 
    "tblTask.CategoryId=? and " 
    "tblTask.referenceId = tblReference.referenceId and tblReference.projectId!=0 and " 
    "tblProject.projectId = tblReference.projectId and (tblTask.title like ? or tblTask.description like ?) " 
    "order by PriorityId DESC, IsCompleted"; 

    sql = [sqlString UTF8String]; 

    sqlite3_stmt *statement; 

    if (sqlite3_prepare_v2(appDelegate.database, sql, -1, &statement, NULL) == SQLITE_OK) { 

     NSString *strCatId = [NSString stringWithFormat:@"%d", catId]; 
     sqlite3_bind_text(statement, 1, [strCatId UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 2, [searchWord UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 3, [searchWord UTF8String], -1, SQLITE_TRANSIENT); 

     sqlite3_bind_text(statement, 4, [strCatId UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 5, [searchWord UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 6, [searchWord UTF8String], -1, SQLITE_TRANSIENT); 

     sqlite3_bind_text(statement, 7, [strCatId UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 8, [searchWord UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 9, [searchWord UTF8String], -1, SQLITE_TRANSIENT); 

     while (sqlite3_step(statement) == SQLITE_ROW) { 


      NSString *strObjectType = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]; 

      NSString *strTaskId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)]; 
      NSString *strProjectId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)]; 
      NSString *strRefTaskId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];    
      NSString *strRefProjectId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 4)];    
      NSString *strProjectTitle = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 5)];    
      NSString *strTaskTitle = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 6)];    
      NSString *strDescription = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 7)]; 

      NSString *strStartDate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 8)]; 
      NSString *strStartTime = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 9)]; 
      NSString *strDueDate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 10)]; 
      NSString *strDueTime = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 11)];    
      NSString *strCompDate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 12)]; 
      NSString *strCompTime = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 13)]; 

      NSString *strPriorityId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 14)]; 
      NSString *strCategoryId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 15)]; 
      NSString *strIsCompleted = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 16)]; 
      NSString *strStatus = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 17)]; 
      NSString *strIsDeleted = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 18)]; 

      NSString *strRemark = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 19)];    
      NSString *strRepeatId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 20)]; 
      NSString *strAlertCount = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 21)];    
      NSString *strTaskType = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 22)]; 

      NSString *strTotalTask = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 23)]; 
      NSString *strCompletedTask = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 24)]; 


      oMainPage = [[MainPage alloc] init]; 
      oMainPage.objectType = strObjectType; 

      oMainPage.tId = strTaskId; 
      oMainPage.pId = strProjectId; 
      oMainPage.refTId = strRefTaskId;     
      oMainPage.refPId = strRefProjectId; 
      oMainPage.pTitle = strProjectTitle; 
      oMainPage.tTitle = strTaskTitle; 
      oMainPage.strDesc = strDescription; 

      oMainPage.strStartDate = strStartDate; 
      oMainPage.strStartTime = strStartTime; 
      oMainPage.strDueDate = strDueDate; 
      oMainPage.strDueTime = strDueTime; 
      oMainPage.strCompDate = strCompDate; 
      oMainPage.strCompTime = strCompTime; 

      oMainPage.strPriority = strPriorityId; 
      oMainPage.strCategory = strCategoryId;    
      oMainPage.strIsCompleted = strIsCompleted; 
      oMainPage.strStatus = strStatus; 
      oMainPage.strIsDeleted = strIsDeleted; 

      oMainPage.strRemark = strRemark;     
      oMainPage.strRepeatId = strRepeatId; 
      oMainPage.strAlertCount = strAlertCount;     
      oMainPage.taskType = strTaskType; 

      oMainPage.totalTask = strTotalTask; 
      oMainPage.completedTask = strCompletedTask; 

      [tempArray addObject:oMainPage]; 
      [oMainPage release]; 
     } 
    } 
    sqlite3_finalize(statement); 
} else { 
    NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(appDelegate.database)); 
} 

[oClsDBFunction release]; 
return tempArray; 
} 

乾杯。