2014-05-16 49 views
4

我有一個3 Bool列的表。與Bool值Sqlite問題

  1. 看不見的默認值1
  2. AnsweredCorrect默認值0
  3. AnsweredWrong默認值0

現在都看不見行是1,AnsweredCorrect 0和0 AnsweredWrong現在 我要統計所有3列爲他們的ON值。我quering

SELECT SUM(Unseen) as Unseen, SUM(AnsweredCorrect) as Correct, SUM(AnsweredWrong) as Wrong FROM table_name 

,當我在SQLite的瀏覽器中運行這個查詢,它返回

看不見20, 正確0, 錯誤0

這是正確的。但是,當我在代碼中使用它,它返回數據庫操作的所有值0

FMResultSet *query = [db executeQuery:[NSString stringWithFormat:@"SELECT SUM(Unseen) as Unseen, SUM(AnsweredCorrect) as Correct, SUM(AnsweredWrong) as Wrong FROM %@;",tableName]]; 

[counters addObject:[NSNumber numberWithInt:[query intForColumn:@"Unseen"]] ]; 
[counters addObject:[NSNumber numberWithInt:[query intForColumn:@"Correct"]] ]; 
[counters addObject:[NSNumber numberWithInt:[query intForColumn:@"Wrong"]] ]; 

我使用FMDB。 有什麼不對?

感謝您的幫助!

+1

@dasblinkenlight這是一個錯字,修正了。 –

+2

您必須使用與您通過「sqlite瀏覽器」查看的數據庫不同的數據庫。 – trojanfoe

+0

不,都是一樣的。 –

回答

0

這沒什麼意義,所以我建議你先做一些檢查。

你需要找出你在做什麼。

很可能您認爲您已連接到一個數據庫文件,但您已連接到另一個數據庫文件。

嘗試做所有的創建工作,並在應用中的代碼中添加數據步驟,而不是在應用外部創建數據庫表。

這意味着您正在連接到您正在閱讀的同一個sqlite文件。

如果這樣做,即SQL返回1,0,0,那麼找到新的SLQlite數據庫文件。

另一種方法是刪除您認爲正在讀取的SQLite文件,如果代碼仍然有效,那麼您將連接到另一個SQLite數據庫文件。

如果連接到正確的文件,請嘗試更改數據庫中的值,將一些值添加到其他列。

0

如果這是查詢數據庫和訪問FMResultSet的完整代碼,我將查看FMDatabase類的文檔。特別是關於-executeQuery的討論:

爲了遍歷查詢的結果,可以使用while()循環。您還需要從一個記錄到另一個記錄「步」(通過[FMResultSet next])。

我想你在FMResultSet中只有一個項目,但是需要「步進」。

編輯:

,而不是在查詢字符串中使用%@佔位符,您可能需要使用?而不是每個文檔。

的executeQuery:

執行select語句

  • (FMResultSet *)的executeQuery:(的NSString *)SQL,...參數的SQL要執行的SELECT語句,帶有可選?佔位符。

... 要綁定的可選參數? SQL 聲明中的佔位符。這些應該是Objective-C對象(例如NSString, NSNumber等),而不是基本的C數據類型(例如int,char *, 等)。

+0

我正在步進,但沒有寫在問題代碼中。 –

+0

我已經更新了我的答案。沒有看到數據庫打開的地方,查詢和結果集的步驟,我不知道我能提供多少幫助。 –