2
마지막으로 추가 된 행 ID를 검색하는 일반적인 문제에 직면 해 있습니다. 문제는이 작업을 가능한 한 원자 적으로 전체 스레드로부터 안전하게 유지하기 위해서입니다. 나는 SQLite 주위에 ADO.NET wrapper을 사용한다.SQLite - 마지막 행의 ID 검색
SQLiteConnection
클래스는 마지막으로 성공한 삽입 작업의RowId
를 반환하는LastInsertRowId
속성을 제공합니다이
내 연구이다. 그러나 어떤 스레드가 had enough luck 일 때LastInsertRowId
의 평가 중 일부 데이터를 테이블로 밀어 넣으면 일부 잘못된 ID를 얻을 수 있습니다 (대부분 내가 찾고있는 것 같지 않음).- SQLite는
AUTOINCREMENT
키를 생성하는 데 사용되는 값을 저장하는sqlite_sequence
이라는 테이블을 유지 관리합니다. 수동으로 값 중 하나를 증가시키고 미리 정의 된 Id 값을 가진 행을 삽입 할 수 있습니다 (저장 프로 시저를 사용하여 MySQL에서 이와 같은 작업을합니다). 문제는이 솔루션이 안전하기를 원한다면이 테이블, 증분 및 업데이트를 원자 프로세스로 구현해야하며이를 수행하는 방법을 모른다는 것입니다. - SQLite 용 Android API에 마지막으로 추가 한 행의 ID를 반환하는
insert
메서드가 포함되어 있지만 사용하는 래퍼에서 해당 메서드를 찾을 수 없습니다.
그래서 마지막으로 추가 한 행의 ID를 스레드 세이프 방식으로 에 기록하는 방법은 무엇입니까??