2011-08-06 64 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

当然,如果我得到任何细节信息 –