2013-10-21 28 views
0

我想在我的數據庫在xcode上運行查詢,並且它始終返回0,即使有5個條目。調用數據庫中的代碼如下所示:SQLite其中字段像文本查詢

-(int)CountWins 
{ 
    int count = 0; 
    if (sqlite3_open([[self filepath] UTF8String], &_db) == SQLITE_OK) { 
    const char* query1= "SELECT COUNT(*) FROM Wins WHERE (Action LIKE 'Win');"; 

    sqlite3_stmt *statement; 

    if(sqlite3_prepare_v2(_db, query1, -1, &statement, NULL) == SQLITE_OK) 
    { 
     //Loop through all the returned rows (should be just one) 
     while(sqlite3_step(statement) == SQLITE_ROW) 
     { 
      count = sqlite3_column_int(statement, 0); 
     } 
    } 
    else 
    { 
     NSLog(@"Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(_db)); 
    } 

    // Finalize and close database. 
    sqlite3_finalize(statement); 
    //sqlite3_close(articlesDB); 
    } 
    [self closeDB]; 

    return count; 
} 

基本上當用戶贏得遊戲時,贏被存儲在與時間戳數據庫中的動作。所有我需要知道的是爲什麼我的查詢不工作,如果我做一個簡單的計數,我得到正確的行數。

這裏是我的代碼插入贏到數據庫:

-(void) addwin 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"dd-MM-yyyy"]; 


    NSDate *TimestampVal = [NSDate date]; 
    NSString *actionVal = [NSString stringWithFormat:@"Win"]; 
    NSString *sqlstr = [NSString stringWithFormat:@"INSERT INTO 'Wins' ('Timestamp','Action') VALUES (?,?);"]; 

    sqlite3_stmt *statement; 
    const char *str = [sqlstr UTF8String]; 

    if (sqlite3_prepare_v2(db, str, -1, &statement, NULL) == SQLITE_OK) { 
     sqlite3_bind_text(statement, 1, [ [dateFormatter stringFromDate:TimestampVal] UTF8String],-1, NULL); 
     sqlite3_bind_text(statement, 1, [actionVal UTF8String],-1, NULL); 
    } 

    if (sqlite3_step(statement) != SQLITE_DONE){ 
     NSAssert(0,@"Error Updating Table."); 
    } 
    sqlite3_finalize(statement); 
} 

我也試過這個查詢存儲爲一個字符串,並將其轉換爲UTF8字符串,但是這並不似乎依然重要更簡單的查詢工作。

任何幫助將是偉大的,謝謝。

乾杯

+0

你怎麼知道有8行?你使用了什麼其他數據庫方法?你確定你的代碼已經達到'sqlite3_column_int'? –

+0

如果我將查詢更改爲「SELECT COUNT(*)FROM Wins」,那麼它會在數據庫中查找5行,使用完全相同的方法查詢不同的查詢。所以我知道有5行,並且我知道5行包含操作列中的單詞「Win」,因爲我測試了將該單詞輸入到數據庫並將其成功的方法。所以它真的歸結爲我的查詢看起來很糟糕,但無論我如何更改引號或用'='代替'LIKE'我仍然無法讓它工作....令人沮喪的是我讓它工作,刪除它,並重新編號,它停止工作 –

回答

1

我明白了:

SELECT COUNT(*) FROM Wins WHERE (Action LIKE 'Win') 

SELECT COUNT(*) FROM Wins WHERE Action='Win'實際上是相同的。

如果你的條件是「含有字勝利」,然後

SELECT COUNT(*) FROM Wins WHERE Action LIKE '%Win%' 

是你在找什麼!

+0

不幸的是,也許在我的代碼中的其他地方有一個錯誤,這導致這一個,任何想法? –

+0

它看起來像我的保存代碼發送行動到數據庫是問題...它似乎是填充該數字1而不是勝利的字段。 –

+0

事實上勝利是存儲到時間戳字段......所以真正的問題是它存儲到錯誤的地方。 –