[問題] SQLite在MultiThreading下
SQLite在MultiThreading下
會有一個問題是
instance多個SQLiteOpenHelper
會發生SQLiteDatabaseLockedException: database is locked
解法兩種
(1)
SQLiteOpenHelper弄成Singleton
單例模式,確保一個時間只有一個Thread讀寫SQLite
SQLiteDatabase中
insert,update,execSQL operation都會調用lock()
只有有query()沒有調用lock()
(2)
API 11以上
直接用enableWriteAheadLogging()
因為multitheading read/write不是針對DB
是先對log
有沒考慮到的部分嗎
請各位高手指點
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.87.77
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1503040518.A.9E2.html
※ 編輯: magic704226 (118.163.87.77), 08/18/2017 15:15:27
→
08/18 15:21, , 1F
08/18 15:21, 1F
→
08/18 15:22, , 2F
08/18 15:22, 2F
S大,我看了網路的資訊和試了一下
那例子在某個thread,實例了多個 SQLiteDatabase
for(int i=0; i<4; i++)
{
DatabaseHelper helper = new DatabaseHelper(MainActivity.this);
allThreads.add(new DbInsertThread(helper, 100));
}
結果產生了The database file is locked.的問題
→
08/18 15:30, , 3F
08/18 15:30, 3F
→
08/18 15:31, , 4F
08/18 15:31, 4F
→
08/18 15:57, , 5F
08/18 15:57, 5F
→
08/18 15:57, , 6F
08/18 15:57, 6F
→
08/18 15:58, , 7F
08/18 15:58, 7F
→
08/18 15:59, , 8F
08/18 15:59, 8F
→
08/18 15:59, , 9F
08/18 15:59, 9F
→
08/18 16:01, , 10F
08/18 16:01, 10F
→
08/18 16:04, , 11F
08/18 16:04, 11F
→
08/18 16:14, , 12F
08/18 16:14, 12F
→
08/18 16:15, , 13F
08/18 16:15, 13F
→
08/18 16:15, , 14F
08/18 16:15, 14F
理解,感謝s大,也算學長吧
※ 編輯: magic704226 (118.163.87.77), 08/18/2017 16:34:05
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章