我正在开发一个实现EditField的应用程序,您可以在其中键入单词,在键入应用程序时将过滤屏幕上显示的内容。
为此,我在用户输入时启动一个新线程。该线程从SQLite表中提取信息,然后在UI上显示它。
我将SQLite用于应用程序中的其他内容,并且每个语句都很有效。
问题是,当我在Filtering线程中使用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条记录,因此不应该是这样。
非常感谢任何帮助!
谢谢!
答案 0 :(得分:4)
Blackberry中SQLite的问题在于你不能通过线程共享SQL连接,你必须连接到DB文件,查询并关闭同一个线程中的所有内容。
SQLite是线程安全的,但前提是您通过不同的线程使用不同的连接对象。