我想在我的數據庫在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字符串,但是這並不似乎依然重要更簡單的查詢工作。
任何幫助將是偉大的,謝謝。
乾杯
你怎麼知道有8行?你使用了什麼其他數據庫方法?你確定你的代碼已經達到'sqlite3_column_int'? –
如果我將查詢更改爲「SELECT COUNT(*)FROM Wins」,那麼它會在數據庫中查找5行,使用完全相同的方法查詢不同的查詢。所以我知道有5行,並且我知道5行包含操作列中的單詞「Win」,因爲我測試了將該單詞輸入到數據庫並將其成功的方法。所以它真的歸結爲我的查詢看起來很糟糕,但無論我如何更改引號或用'='代替'LIKE'我仍然無法讓它工作....令人沮喪的是我讓它工作,刪除它,並重新編號,它停止工作 –