我使用simpleQueryForLong()
方法以下列方式:SQLiteStatement.simpleQueryForLong()是不同的行爲相比,現在的文件說
mResuableStatment = DatabaseHandler.database.compileStatement(
"SELECT MIN(timestamp) FROM " + TABLE_LOCAITON_LOGGING);
long oldestTimestamp = mResuableStatment.simpleQueryForLong();
timestamp
是表TABLE_LOCAITON_LOGGING
中列的名稱。- 該數據庫在該點處是可讀寫的。
根據文件 - 如果沒有行的話,那麼這段代碼假設拋出SQLiteDoneException
,但真正發生的事情是,當沒有行 - 的simpleQueryForLong()
返回零(沒有出現任何錯誤時拋出)
什麼是更奇怪和意外,當我真正在包裝try/catch塊這個代碼,它將每時間扔SQLiteDoneException
,即使有表中的行:
try {
long oldestTimestamp = mResuableStatment.simpleQueryForLong();
} catch (SQLiteDoneException e) {
e.printStackTrace()
}
在Nexus 5,Galaxy Nexus,LG G2,HTC One X上都可以看到此行爲,所有這些都運行Android KitKat。
我有點困惑,因爲這迫使我不要使用try/catch塊,因爲如果它被使用 - 無論有沒有行,總是拋出異常,反之亦然。
似乎在我測試的每個設備中 - 沒有try/catch塊,當沒有列時 - 它返回零。
請幫我理解什麼是正確的方式,我做錯了什麼,或者如果簡單的文檔是錯誤的。
如果是這樣,那麼爲什麼文檔中有不同的說法?以及我的代碼應該如何覆蓋這種情況? – 2014-09-11 05:08:07
@Tal,它沒有。它聲明,如果查詢返回零行,它將拋出異常。我說的是'select min()'不會返回零行,它總是返回一個。 'select x'可能會返回零行,但像'select min(x)'這樣的聚合函數不會。 – paxdiablo 2014-09-11 05:11:43
我不明白你的答案中的一件事:我沒有說它返回零行。我說它返回零值。正如我告訴過你的 - 當我用try/catch包裝它時 - 即使有行存在時,它總是會出現異常 – 2014-09-11 05:14:20