본문 바로가기
DataBase

Sqlite에서 DataBase is Lock 으로 인해 DB 내용 수정 불가.

by HyunS_ 2019. 4. 26.

SELECT 문으로 조회한 데이터를 객체에 저장을 한 뒤 그 객체의 내용을 수정을 하려 했는데

 

code 5 Database is lock 이라는 에러가 발생했습니다.

 

각각의 쿼리를 실행했을 때는 문제 없이 조회도 되고 수정도 되었습니다.

 

그런데 꼭 같이 실행할 때는 DB에서 lock 이 걸려 데이터 수정이 안됩니다.

 

왜 그런지 물어보아 알아보니 쿼리 실행 후 종료가 안된 상태에서 다시 다른 쿼리를 실행하려 할 때 Lock이 걸릴 수 있다 하여 코드를 살펴보았습니다.

 

그래서 처음 찾은 해결책은 SELECT 쿼리를 실행 후 객체에 저장한 뒤

GC.Close();

GC.WaitForPendingFinalizers();

 

두 구문을 추가해주니 정상적으로 동작하는 것을 확인했습니다.

 

다른 방법이 또 있나 찾아보다가

 

SQLiteDataReader 동작 완료 후 reader.close() 로 SQLiteDataReader을 닫아주니 GC 없이도 제대로 동작되는 것을 확인했습니다.

 

결국 쿼리 실행 후 데이터를 읽고 저장한 후 닫지를 않아 발생한 문제로 확인되었습니다.

 

 

 

728x90

댓글