마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

테이블 기본키 _id 값에서 상위 데이터 삭제하면 컬럼 값이 바뀌나요?

0 추천
String query = String.format( "CREATE TABLE person ("
        + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
        + "name TEXT, "
        + "age INTEGER );");
db.execSQL( query );

이렇게 테이블을 만들게 되고 데이터가

1     |     가     |     20

2     |     나     |     22

처럼 데이터가 삽입되어 있는 상태라면 맨 위 첫번째 행의 데이터가 삭제가 되면 

2번째 행의 _id는 1로 바뀌는 건가요? 아님 그대로 2가 되는건가요? 그대로 2라면 1이 되기 위해서는 

테이블을 어떻게 바꿔야하나요?:?

 

기객 (3,600 포인트) 님이 2016년 10월 6일 질문
_id 칼럼은 Primary Key 칼럼이라고 합니다.. Primary Key는 바뀌지 않는  unique한 값입니다. 따라서 아랫분 말씀처럼 이 값을 수정하시는 것은 db를 처리하는 올바른 방법이 아닙니다. 필요하시다면 칼럼을 하나 추가해서 여기에 있는 칼럼을 사용하셔야 합니다.

1개의 답변

0 추천
 
채택된 답변

데이터가 삽입되어 있는 상태라면 맨 위 첫번째 행의 데이터가 삭제가 되면 

2번째 행의 _id는 1로 바뀌는 건가요? ==> 아니요 

아님 그대로 2가 되는건가요? ==> 네 

그대로 2라면 1이 되기 위해서는 

테이블을 어떻게 바꿔야하나요?:? ==> 그냥은 안되고 일단 AUTO INCREMENT 제거 후 SELECT COUNT 로 개수 검사하고 UPDATE 문으로 갱신하면 되긴하지만 보통 그렇게 안쓰죠 목적이 무언인지 모르겠지만 말입니다. 

멀 하고 싶으신건지 큰 그림을 먼저 적으세요 

 

aucd29 (218,390 포인트) 님이 2016년 10월 7일 답변
기객님이 2016년 10월 9일 채택됨
리스트뷰에서 한 리스트를 클릭을 하면 데이터가 보이게 끔 만들고 있는데요
행을 클릭할때 onItemClick 메소드 안에 final long id 인자값을 가져와서 조건문으로where _id='ld' 로 커서 어댑터 사용해서 데이터 가져왔었거든요 데이터 삽입 변경까지는 되는데 삭제를 하게 되면 인자값으로 데이터를 가져오는건데 달라지지 않는다면 오류 뜰것같아서 그랬습니다
일단 where _id='pos' 로 설명하신것으로 파악되며 보통의 방법을 설명 드리면

listview 에 데이터를 출력 하기 위해 ArrayList 에 디비 데이터를 추가 할 것이고
listview 를 touch 하면 얻을 수 있는 pos 값 기준으로 array list 의 pos 값에 해당하는
db 데이터를 얻고 그 데이터내의  _id 값을 얻어 where 하시면 됩니다.


ArrayList<DbType> dbList; // 존재시

click event listener 에서
int pos 값을 이용

DbType db = dbList.get(pos);
where _id='db._id'

식인거죠
...