2010-07-01 25 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