2010-07-01 6 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(); 

그리고 스레드는 prepare 문에서 정지합니다.

약 1 분 후에 결과를 얻지 만 지금은 그냥 멈추었습니다.

테이블에는 레코드가 하나 뿐이므로 테이블에 레코드가 없어야합니다.

도움이 될 것입니다.

감사합니다.

답변

4

검은 딸기의 SQLite 문제는 스레드를 통해 SQL 연결을 공유 할 수 없다는 것입니다. DB 파일에 연결하고 쿼리하고 동일한 스레드에서 모두 닫아야합니다.

다른 스레드를 통해 다른 연결 개체를 사용하는 경우에만 SQLite는 스레드 안전입니다.

+0

+1 감사합니다. 정확히 대답이 필요합니다. –

+0

그래서 하나의 단일 스레드 내부에서 데이터베이스에 대한 작업을 수행해야합니다. 그럼 스레드 안전성은 어디에 있습니까? 다른 스레드에서 다른 데이터베이스로 작업 할 수 있습니까? .. –

+0

안녕하세요. 맞습니다. 이해할 수있는 한, "스레드 세이프 (thread-safe)"라는 용어는 각각 다른 DB 파일에 연결되어있는 한 다른 스레드에서 많은 SQLite 연결을 가질 수 있다고 지정합니다. Blackberry 문서에서 "thread-safe"라는 용어가 올바르게 사용되지 않는다고 생각합니다. thread-safe에서 다른 스레드에서 동일한 연결 인스턴스를 사용할 수 있다는 것을 알았지 만 여기서는 그렇지 않습니다. – Arturo

관련 문제