2011-08-06 65 views
0

也有類似的問題,但不清楚答案圍繞從多個線程使用sqlite數據庫。 考慮以下情形:從多線程sqlite訪問閱讀

class MainActivity extends Activity { 
DbHelper db; //extends sqliteopenhelper 
... 
void M1() { 
    db.getReadableDatabase(); 
    Cursor c = db.query("...." 
    ... 
    db.close(); 
} 

void M1() { 
    db.getReadableDatabase(); 
    Cursor c = db.query("...." 
    ... 
    db.close(); 
} 

沒關係,這不是多線程,但問題是,

  1. 它成爲使用sqliteopenhelper實例的同一個實例的一個問題(即DB)像上面那樣,多次以不同的方式打開和關閉?
    而我的情況是這樣的:

    myAsync extends AsyncTask 
    doInBackground(.. {
    do something using M1(); //this is a background thread }} onResume()...{ myAsync.execute(); M2(); //this is the main thread ... }
  2. ,如果你看到的是,在異步的情況下,它可能是兩個方法可以同時訪問同一個數據庫(讀only-關於寫如何? )。但他們正在使用SqliteOpenHelper的同一個實例。它會導致碰撞,如果是的話如何避免這種情況?

  3. 我想了解更多關於sqlite數據庫和併發性的信息
    任何想法都將非常感激。

回答

0

雅沒有碰撞的機會,但你的數據庫可能會關閉時,另一個線程是獲得性,你可以去線程,即優先級和等的「同步」的概念,當我們使用synchronized關鍵字,然後,一個線程完成它的任務,然後其他線程將啓動

+0

謝謝你提到關於「同步」,有人說,如果我只讀,沒有限制,沒有碰撞。真的嗎?我也想了解同步,但在那裏沒有用。你能推薦我任何鏈接,博客,來源嗎?我已經搜索了Android開發。 –

+0

當然,如果我得到任何細節信息 –