2010-07-01 24 views
1

我正在開發實現,可以在其中輸入一個詞,而鍵入應用程序將過濾正在屏幕上顯示內容的EditField中的應用程序。黑莓線掛在SQLite的聲明準備

爲此,我在用戶鍵入時開始一個新線程。該線程從SQLite表中提取信息,然後在UI上顯示。

我在應用程序中使用SQLite來處理其他事情,並且每條語句都很好。

的問題是,當我使用Statement.prepare()方法中篩選線程,它掛起!

爲了簡便,讓假設用戶只輸入在EditField中1個字母。

代碼的想法是這樣的:

我啓動線程的用戶輸入一個字母后:

  mThread = new Thread(){     
        public void run(){filtrarListaRecolecciones();}      
      }; 
      mThread.setPriority(Thread.MAX_PRIORITY); 
      mThread.start(); 

而在filtrarListaRecolecciones我運行:

mStatement = mBD.createStatement("SELECT COUNT(*) FROM Recolecciones WHERE Nombre LIKE '%a%' AND Status=3"); 
mStatement.prepare(); 

而且該線程在準備語句中掛起。

它用來獲得約1分鐘後的結果,但現在它只是掛起。

表只有1條記錄,所以它不應該是因爲這一點。

任何幫助將不勝感激!

謝謝!

回答

4

與黑莓的SQLite的問題是,你不能共享在線程SQL連接,你必須連接到數據庫文件,查詢並關閉所有在同一個線程。

SQLite是線程安全的,但前提是您通過不同的線程使用不同的連接對象。

+0

+1感謝,正是答案我需要 – 2011-02-22 00:23:56

+0

所以,你應該從一個單獨的線程中執行數據庫的任何操作。那麼線程安全在哪裏?我可以從另一個線程的另一個數據庫? – 2011-09-12 01:59:05

+0

嗨安德烈。這是正確的,根據我的理解,他們使用術語「線程安全」來指定只要每個連接到不同的DB文件,就可以在不同線程中擁有儘可能多的SQLite連接。我相信術語「線程安全」在Blackberry文檔中沒有被正確使用。從線程安全的我明白,我可以在不同的線程中使用相同的連接實例,但這不是這種情況。 – Arturo 2011-09-22 14:59:24