我想了解多線程訪問ATTACHED sqlite數據庫所涉及的問題。顯而易見的是,一個SQLiteOpenHelper
可確保一個數據庫連接,從而確保對數據庫的一個序列化訪問。當一個「子」數據庫連接兩次,在兩個不同的「父」SQLiteOpenHelper
s /兩個不同的父數據庫連接下時會發生什麼?Android中的附加sqlite數據庫和多線程問題
Q1:如何訪問連接的子數據庫序列化?問題2:在這種情況下如何提前寫入日誌記錄?
需要明確的是,這是我所描述的情景:
ASQLiteOpenHelper instanceA = new ASQLiteOpenHelper(context, dbnameA, null, version);
BSQLiteOpenHelper instanceB = new BSQLiteOpenHelper(context, dbnameB, null, version);
instanceA.getWritableDatabase().execSQL("ATTACH '" + dbnameChild + "' AS child");
instanceB.getWritableDatabase().execSQL("ATTACH '" + dbnameChild + "' AS child");
通過instanceA
和instanceB
同時安全寫入「孩子」?閱讀怎麼樣?如果爲家長啓用writeahead日誌記錄,是否也爲孩子啓用?如果是,是爲child
創建的兩個單獨的預寫日誌記錄嗎?
看起來'DB'是一個共享資源,'SQLiteOpenHelpers'的多個實例正在訪問'DB'。請糾正我,如果我錯誤解釋你的情況。 – guptakvgaurav
我認爲你錯誤地解釋了我的情況。有三個獨立的數據庫:dbnameA,dbnameB和dbnameChild。這兩個助手每個都打開一個不同的數據庫。但是,第三個數據庫dbnameChild連接到兩個助手下。 – zyamys
因此,dbnameChild是兩個助手的共享資源。是不是 – guptakvgaurav