SELECT 문으로 조회한 데이터를 객체에 저장을 한 뒤 그 객체의 내용을 수정을 하려 했는데
code 5 Database is lock 이라는 에러가 발생했습니다.
각각의 쿼리를 실행했을 때는 문제 없이 조회도 되고 수정도 되었습니다.
그런데 꼭 같이 실행할 때는 DB에서 lock 이 걸려 데이터 수정이 안됩니다.
왜 그런지 물어보아 알아보니 쿼리 실행 후 종료가 안된 상태에서 다시 다른 쿼리를 실행하려 할 때 Lock이 걸릴 수 있다 하여 코드를 살펴보았습니다.
그래서 처음 찾은 해결책은 SELECT 쿼리를 실행 후 객체에 저장한 뒤
GC.Close();
GC.WaitForPendingFinalizers();
두 구문을 추가해주니 정상적으로 동작하는 것을 확인했습니다.
다른 방법이 또 있나 찾아보다가
SQLiteDataReader 동작 완료 후 reader.close() 로 SQLiteDataReader을 닫아주니 GC 없이도 제대로 동작되는 것을 확인했습니다.
결국 쿼리 실행 후 데이터를 읽고 저장한 후 닫지를 않아 발생한 문제로 확인되었습니다.
728x90
댓글