SQLite를 쓸때 SQLiteDatabase의 insert() 메서드의 문서를 보게 되면
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
return 되는 long 값에 대해 -1이 return 될 경우 error 이며 그렇지 않을경우
삽입된 rowId가 리턴 된다고 되어 있습니다.
그런데 제가 ContentProvider를 사용할 일이 생겨 MeidaProvider.java를 참조하고자
소스코드를 읽고 있던 도중
rowId = db.insert("audio_genres_map", "genre_id", values);
if (rowId > 0) {
newUri = ContentUris.withAppendedId(uri, rowId);
}
의 소스코드를 발견했는데요 문서에 적혀 있는걸로 생각해보면 if (rowId > -1) 이 되야 합니다.
그러나 다른 기타 프로젝트도 아니고 구글에서 직접 작성한 MediaProvider 에서 rowId > 0 인걸
보고 실험을 해보았는데 빈 테이블에 insert로 아이템을 추가 했을때 id가 1부터 기록 되더군요
0을 어떤 의미에서 비워둔건지 검색해봐도 마땅히 답이 없더군요 실제 insert가 어떤식으로 db
기록 작업을 하는지 SQLiteDatabase.java 소스코드를 봐도 해당 부분은 네이티브 메서드더군요
네이티브 메서드까지 뒤져볼까 하다가 포기 했습니다.
문서에 제대로 기록돼 있지 않은 내용 이기에 공유하고자 올립니다.
ps. http://www.sqlite.org/autoinc.html 해당 링크를 보면 ROWID 기록 방식이 1부터 라는군요
1부터 시작하는건 SQL 표준 정의가 있기 때문이겠죠.
사견으로는 직관성의 이유로 저리 정의했을것 같습니다 ^^