Я разрабатываю приложение, которое реализует 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 запись, поэтому из-за этого не должно быть.
Любая помощь была бы принята с благодарностью!
Спасибо!
+1 спасибо, точно ответ, который мне нужен –
Итак, вы должны делать любые операции с базой данных изнутри одного потока. Где же тогда безопасность потоков? Я могу работать с базой данных ANOTHER из другого потока? .. –
Привет, Андрей. Правильно, из того, что я понимаю, они используют термин «потокобезопасный», чтобы указать, что вы можете иметь столько соединений SQLite в разных потоках, сколько каждый подключен к другому файлу DB. Я считаю, что термин «поточно-безопасный» НЕ используется правильно в документации Blackberry. Из потокобезопасного я понял, что могу использовать один и тот же экземпляр подключения в разных потоках, но здесь это не так. – Arturo