Programing

Android SQLite의 "_id"필드 정보

lottogame 2020. 11. 15. 10:50
반응형

Android SQLite의 "_id"필드 정보


Android SQLite에서 "_id"필드가 필요합니까?


_id는 커서 (예 : ResourceCursorAdapter)를 사용하는 향상된 어댑터를 사용할 때 유용합니다. 이 어댑터는 어댑터가 사용되는 항목 (예 : ListView의 행)과 관련된 항목과 관련된 테이블의 특정 행을 참조하는 데 사용할 수있는 ID를 제공하는 데 사용됩니다.

커서에 _id 열이 필요한 클래스를 사용하지 않을 경우에는 필요하지 않으며 "as _id"를 사용하여 커서에서 _id라고하는 것처럼 다른 열을 표시 할 수도 있습니다.


_ROWID_를 사용하지 않는 이유는 무엇 입니까?

SQLite는 어쨌든 모든 행에 대해 이것을 제공하므로 select 문에서 _id로 별칭을 지정할 수 있습니다.


기술적으로는 필드 _id가 필요하지 않지만 CursorAdapter클래스 를 사용하는 경우 (특히 메모장 예제로 작업하는 경우) 예

"커서에는"_id "라는 열이 있어야합니다. 그렇지 않으면이 클래스가 작동하지 않습니다."

여기 문서에 설명 된대로 . 불행히도 코드 예제는 이것을 명확하게하지 않습니다.


많은 경우에 id 필드를 갖는 것이 매우 편리합니다. 나는 자동 증가하는 것을 선호합니다 (아래 그림 참조). 나는 항상 id 필드에 대한 새로운 용도를 찾고 있습니다. :)

데이터를 어댑터에 연결할 때가되면 테이블 이름 별칭을 사용하여 id 필드를 _id. 예 : SELECT id _id, msg from message order by id. 이렇게하면 어댑터는 필드라는 필드를보고 _id모두가 행복합니다.

다음은 테이블을 정의하는 방법에 대한 샘플입니다.

CREATE TABLE message (_id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, tripID TEXT, msg TEXT);

로부터 공식 문서 ...

커서는 "_id"라는 열을 포함해야합니다. 그렇지 않으면이 클래스가 작동하지 않습니다. 또한 병합 된 커서의 "_id"열에 겹치는 값이있는 경우이 클래스와 함께 MergeCursor를 사용하면 작동하지 않습니다.

그리고 Cursor그것은 :

이 인터페이스는 데이터베이스 쿼리에서 반환 된 결과 집합에 대한 임의의 읽기-쓰기 액세스를 제공합니다.

즉, _idAndroid SQLite (일반적으로 Cursor 사용)가 필요합니다.


_id 열을 자동 증가 정수로 정의하면 실제로 SQLite가 기본적으로 제공하는 ROWID 열의 별칭입니다 ( https://www.sqlite.org/lang_createtable.html#rowid ).

create 문은 다음 형식을 취해야합니다.

CREATE TABLE t(_id INTEGER PRIMARY KEY ASC, y, z);

이것이 효과가 있음을 증명하기 위해 ...

UPDATE t SET _id=22 WHERE _id=11;

그때

SELECT ROWID, _id FROM t;

당신은 모두를 찾을 수 _idROWID같은 값을 가지고있다.

CREATE에서 DESC를 사용하면 새 열이 생성되고 ROWID별칭이 지정되지 않습니다.


분명히 아니다. ListView와 같은 일부 위젯이 데이터를 채우는 데 사용하는 편리한 필드입니다. 이 좋은 기사를 참조하십시오 : http://www.casarini.org/blog/2009/android-contentprovider-on-sqlite-tables-without-the-_id-column/


물론 사용자 고유의 UI 위젯과 자체 어댑터를 만드는 경우 기본 키의 이름을 "_id"로 지정할 필요가 없습니다. 원하는 이름이 될 수 있습니다. 그러나 UI 위젯 컬렉션을 관리하고 데이터베이스의 올바른 행에 바인딩하는 것은 사용자의 책임입니다. "_id"는 Brad가 지적했듯이 ListView에만 유용합니다.

참고 URL : https://stackoverflow.com/questions/3192064/about-id-field-in-android-sqlite

반응형