2011-01-11 6 views
1

데이터베이스의 시작 부분에 어떻게 요소를 삽입 할 수 있을까요? 그 이유는 다음과 같습니다. a) 요소 (ListView)를 '마지막으로 맨 위에 삽입하고 맨 아래에 처음으로 삽입'(스택처럼)으로 표시하려합니다. b) 요소의 양을 제한하고 싶습니다. 내 DB에. 새로운 요소가 추가되면 (한계를 넘어서) 나는 처음에 새로운 요소를 넣고 마지막 요소를 삭제할 수 있습니다. (마지막 요소를 삭제하는 방법을 아직 모릅니다.)안드로이드 데이터베이스에 삽입 순서

해결책을 찾고 있었지만 요소가 삽입되는 방식을 제어 할 수 있는지 궁금해졌습니다. 그렇지 않다면 데이터베이스를 끝에서 끝까지 표시 할 생각이었습니다. 커서가 항상 db의 시작 부분에 설정되기 때문에 실제로 어떻게해야하는지 모릅니다. 이것을 달성 할 수 있다면 b) 첫 번째 요소를 삭제하여 해결할 수 있습니다 (다시 이것을 달성하는 방법을 아직 알지 못함).

답변

3

모든 SQLite 테이블의 모든 행에는 테이블 내의 행을 고유하게 식별하는 64 비트 부호있는 정수 키가 있습니다. 이 정수는 일반적으로

SELECT * from mytable order by ROWID desc; 

가장 오래된 삭제,

ROWID here에 대한 자세한 내용을 읽고 ....은 "ROWID"

지난 상단에 삽입 최초의 하단에 삽입하려면라고 :

DELETE from mytable WHERE ROWID = (SELECT MIN(ROWID) FROM mytable); 

ROWID를 사용하는 경우 기존 테이블을 수정할 필요가 없습니다. 그리고 ROWID의 가치는 보장됩니다.

+0

답변 해 주셔서 감사합니다. 그러나 당신이 게시 한 삭제 명령 구문 오류가 나타납니다. 나는 두 번 확인했고 그것은 내 (myidabel 이름과 마커를 rowid 열에 두는 것과 동일 함). 이게 옳은 거니? –

+0

SQL에서 '삭제'에 대한 Sytax는 다음과 같습니다. DELETE FROM table_name where some_column = some_value. 따라서 'mytable'앞에 FROM 키워드를 넣어야합니다. – antonyt

+0

Ok 삭제 후 '보낸 사람'이 누락되었습니다. 덕분에 작동합니다 :> EDIT : 귀하의 코멘트를 알리지 못했습니다 :> –

1

데이터베이스에 레코드를 삽입 할 때 timestamp (새 필드로)을 저장할 수 있습니다. 그런 다음 제한을 초과하면 찾을 수있는 가장 오래된 레코드를 삭제합니다 (예 : MAX SQL 키워드 사용). timestamp 필드와 함께 DESC을 정렬하여 역순으로 레코드를 표시 할 수 있습니다.

관련 문제