我正在开发一个实现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();
并且线程卡在prepare语句上。
它通常在大约1分钟后获得结果,但是现在挂起了。
该表只有1条记录,因此不应该这样。
任何帮助将不胜感激!
谢谢!
最佳答案
Blackberry中SQLite的问题在于,您无法通过线程共享SQL连接,您必须连接到数据库文件,查询并关闭同一线程中的所有线程。
SQLite是线程安全的,但前提是您通过不同的线程使用不同的连接对象。
关于multithreading - 黑莓线程卡在SQLite语句上准备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160407/