2016-08-30 3 views
1

여러 테이블이있는 sqlite 데이터베이스가 있습니다. 그 중 한 명은 학생 연수라고 불렀습니다. 내 코드에서 나는 선택, 삽입, 업데이트를 위해 테이블을 충분히 호출하고있다.Sqlite 문제 : 데이터베이스 파일이 잠겼습니다

은 java.sql.SQLException : 호출의

하나 개의 인스턴스가 다음은 [SQLITE_BUSY] 데이터베이스 파일 (데이터베이스가 잠겨) 잠겨 :

잠시 후 나는 메시지를 수신하고
String query3 = "select * from studentssession where id= ? and math= ? and level = ?"; 
    PreparedStatement pst__ = connectionUsers.prepareStatement(query3); 
    pst__.setString(1, x); 
    pst__.setString(2, x1); 
    pst__.setString(3, x2); 
    ts2 = pst__.executeQuery(); 

나는 준비된 진술을 할 때마다 닫아야하는지, 내 문제를 일으키는 경우가 있는지 알아 내려고하고 있습니다.

편집 : 예를 들어 javafxbutton을 사용하여 데이터베이스에 가능한 열린 참조가 있는지 검사 할 수 있습니까?

편집 : 내 코드에서 테이블에 대한 참조에 문제가 있는지 찾아서 닫을 수있는 방법이 있습니까?

+0

sqlite 데이터베이스에 대한 여러 참조가 열려 있기 때문일 수 있습니다. –

+0

예, 그렇습니다. 어떻게 닫을 수 있습니까? 그 모든 참조에 대한 검사를 수행 할 수있는 방법이 있습니까? 이것이 준비된 진술과 관련이있을 가능성이 있습니까? – konstantin

+0

코드 종료 pst __. connection.close(); –

답변

1

아마도 sqlite 데이터베이스에 대한 여러 참조가 열려 있기 때문일 수 있습니다. while 루프의 finally 블록에서 PreparedStatement를 닫는 것으로 시작하겠습니다.

PreparedStatement pst__ = null; 
try{ 
    pst__ = connectionUsers.prepareStatement(query3); 
    pst__.setString(1, x); 
    pst__.setString(2, x1); 
    pst__.setString(3, x2); 
    ts2 = pst__.executeQuery(); 
}finally{ 
    if(pst__ != null) { 
    pst__.close(); 
    } 
} 

모든 것이 끝나면 데이터베이스 연결을 닫아야합니다.

또한 SQLite에 연결할 때 여러 연결을 사용하는 것은 나쁜 습관입니다.

http://touchlabblog.tumblr.com/post/24474398246/android-sqlite-locking

1에 poolsize의 maxactive 설정을 참조하고 시도.

+0

pst이어야합니다 __. close(); 또는 pst __. connection.close(); 아흐마디가 의견에서 제안하는 것처럼? – konstantin

+0

가능한 공개 참조를 확인할 수 있습니까? – konstantin

관련 문제