2011-03-12 57 views
4

我在我的模擬器的日誌文件中得到了以下錯誤,我不知道該怎麼做,因爲谷歌搜索什麼都沒有。Android SQLite錯誤代碼21

03-12 12:53:28.782: INFO/Database(688): sqlite returned: error code = 21, 
    msg = misuse detected by source line 95716 
03-12 12:53:28.812: ERROR/Database(688): sqlite_config failed error_code = 21. 
    THIS SHOULD NEVER occur. 

回答

8

我在SQLite C/C++ interface documentation發現

#define SQLITE_MISUSE  21 /* Library used incorrectly */ 

如果SQLite的API程序的一個或多個 使用 不當可能會出現此錯誤。不正確 用法的例子包括主叫sqlite_exec使用sqlite_close或調用 sqlite_exec與從兩個 單獨的線程相同的數據庫 同時指針數據庫已被關閉 之後。

我猜,這意味着你的代碼是不正確的調用接口庫周圍線95716.

後來。 。 。

OP確認實際問題涉及兩個線程同時訪問數據庫,一個嘗試寫入數據庫,另一個嘗試關閉它。我從這裏推斷出,有問題的代碼行95716在模擬器中。 (因爲OP的代碼庫只有1000行或更少)。

+0

只是這樣。沒有95716行,因爲我的代碼基本上只有1000行。但是你的評論指出了我的正確方向,因爲我確實有一些線程可以與數據庫一起工作,但是他們各自處理自己的連接,所以我必須更仔細地看一下這些代碼。 – davidk01 2011-03-12 21:13:03

+0

嗯。它可能是指模擬器源中的95716行嗎?你可以切換到不同的模擬器來測試這個想法嗎? – 2011-03-12 21:16:59

+0

我選擇在關閉數據庫時使用鎖,以便兩個調用不會打開和關閉數據庫。我認爲這應該解決任何未來的問題。 – davidk01 2011-03-12 22:15:01