2010-07-01 2 views
1

Я разрабатываю приложение, которое реализует EditField, в котором вы можете ввести слово, и при наборе приложения будет фильтровать содержимое, отображаемое на экране.Blackberry thread hang on on SQLite statement

Для этого я начинаю новую тему, когда пользователь вводит. Этот поток извлекает информацию из таблицы SQLite, а затем показывает ее в пользовательском интерфейсе.

Я использую SQLite для других вещей в приложении, и каждое утверждение отлично работает.

ПРОБЛЕМА заключается в том, что когда я использую метод Statement.prepare() в потоке фильтрации, он зависает!

Чтобы сделать это проще, допустим, что пользователь набрал только 1 букву в EditField.

Идея кода что-то вроде этого:

Я начинаю нить после того, как пользователь напечатал письмо:

  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 в Blackberry заключается в том, что вы не можете использовать SQL-соединение по потокам, вам нужно подключиться к файлу DB, запросить и закрыть все в одном потоке.

SQLite является потокобезопасным, но только если вы используете разные объекты соединения через разные потоки.

+0

+1 спасибо, точно ответ, который мне нужен –

+0

Итак, вы должны делать любые операции с базой данных изнутри одного потока. Где же тогда безопасность потоков? Я могу работать с базой данных ANOTHER из другого потока? .. –

+0

Привет, Андрей. Правильно, из того, что я понимаю, они используют термин «потокобезопасный», чтобы указать, что вы можете иметь столько соединений SQLite в разных потоках, сколько каждый подключен к другому файлу DB. Я считаю, что термин «поточно-безопасный» НЕ используется правильно в документации Blackberry. Из потокобезопасного я понял, что могу использовать один и тот же экземпляр подключения в разных потоках, но здесь это не так. – Arturo