2012-07-06 4 views
1

this answer 나는 실제로 ROWID의 별칭 인 열이있는 테이블을 만드는 방법을 고안해 냈습니다. 일부 안드로이드 클래스는 '_id'라는 고유 한 열이 필요하지만이 열을 PRIMARY KEY로 사용하지 않으려 고합니다. 나는 칼럼에서 AUTO_INCREMENT를 사용하지 않는다. PK가 아니기 때문에, _id가 별칭이되고 싶다. 내가 쿼리에서 그 일을 할 수 있다는 것을 알고 있지만 내 상황에는 실용적이지 않습니다. 어떤 포인터? 이것은 가능한가?SQLite ROWID에 대한 별칭이있는 테이블 만들기

감사합니다 :)

편집 : 정말 난 그냥 내 자신의 PK 가질 수 있지만 CursorAdapters가 제대로 작동하려면 또한 id 필드를 갖고 싶어 등

편집이

: Do i have to use _ID as a SQlite primary key? and does it have to be an INT? (Android Dev)를 보면이 할 제안 내 PK가 숫자 형식이라도 쿼리에 포함되지만, 내 PK에 사용하는 TEXT col이 있다면 무엇입니까? (일종의 생각을 큰소리로 여기에) - 난 복사 할 수있는 것 같아요 CursorAdaptor 그냥 getString 대신에 _id col에 대한 (더하기, 커서 어댑터에 PK로 사용할 수있는 이름을 전달하는 _id 제거하십시오!) 또는 ROWID에 대한 별칭을 _id로 SELECT에 추가하면 약간의 해킹이 일어납니다.

답변

0

TBH, 저는 이것이 실제로 가능하다고 생각하지 않습니다. PK 컬럼의 종류가 필요합니다 (해킹이 많은 경우에도 일종의 대안을 만들 수 있음).

기술적 인 PK로 _id 열을 사용하고 논리 PK로 추가 열을 지정하는 것이 좋습니다. 즉 고유 제한이있는 자유롭게 정의 된 열입니다. 그러면 프로그램 논리가 모든 작업에 대해 논리 PK를 간단하게 사용할 수 있어야합니다. 물론 이것은 find 연산 등을위한 커스텀 질의를 요구할 것이다. 그러나 이것은 대개 더 적합하다.

HTH ..

2

당신은 완전히 독립적 인 기본 키를 가질 수 SQLite는 내장 된 rowid.

모든 SQLite 테이블의 모든 행에는 테이블 내의 행을 고유하게 식별하는 64 비트 부호있는 정수 키가 있습니다. 이 정수는 대개 "ROWID"라고합니다. rowid 값은 열 이름 대신 특수한 대소 문자 독립적 인 "rowid", "oid"또는 "rowid"중 하나를 사용하여 액세스 할 수 있습니다.

당신은 당신의 쿼리를 공식화 할 수

있도록 내장 된 ROWID 결과에 숨겨진 ROWID 열을 앞에 추가하여 CursorAdaptor의 이익을 위해 _id라고 :

select _rowid_ as _id, ... 

ROWID를 고유이지만, 기본 키일 필요는 없습니다. 기본 키는 CREATE TABLE 문에서 원하는대로 만들 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이것을 가능한 해결책으로 알고 있었지만 다른 해결책이 있는지 알고 싶었습니다. 그들이 방금 해 놓았 으면 좋겠어 그래서 당신은 PK col 이름을 어댑터에 전달할 수 있습니다. 그리고 때로는 어색한 _id 값 대신에 값을 전달합니다. – Dori

관련 문제