2010-11-30 3 views
8

이것은 아마도 어리석은 질문이지만 아직 답변을 찾을 수 없습니다._ID를 SQlite 기본 키로 사용해야합니까? 그것은 지능이어야합니까? (Android Dev)

내 고유 이름을 가진 텍스트 열을 테이블의 기본 키로 사용하려고합니다. 이 정의하는 코드의 작은 부분은 내 프로젝트에서이 같은 같습니다

...blahblah..."CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + "_ID TEXT PRIMARY KEY, "...blahblah.. 

이 작품과 같이에게 내가하고자하는 의지를? 아니면 "AS ID"를 사용해야합니까? 나는 자동 증분 정수로 _ID를 가진 단일 테이블만을 볼 수있다. 또한 이것은 다른 테이블의 외래 키로 의도되었지만 데이터베이스를 설계 한 이후로 나는 더 많은 정보를 읽었고, android & SQLITE?

아래의 포스터 덕분에 정보가 올바로 적용되는지 조금 느리고 확실하지 않은지 확인할 수 있습니까? 내가 이런 만들 문이있는 경우

그래서 :

"CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + " TEXT PRIMARY KEY, " + 
    IN_OUT + " TEXT, " + BUDGET_AMOUNT + " REAL, " + ACTUAL_AMOUNT_SPENT + " REAL, " 
    + AMOUNT_STRAYED + " REAL, " + OVERBUDGET_TF + " INTEGER, " + AUTOSPEND_TF + 
    " INTEGER);" 

을 그리고 있습니다 db.execSQL는

난 후 상호 교환 사용할 수 있습니다 ("CAT_ITEM_ID AS ID, ID 선택")? 나 가까운 곳이라도 어디 있니? 하하, 미안해!

답변

12

원하는대로 테이블을 만들고 정의 할 수 있지만, 조정할 수없는 CursorAdapter를 통해 테이블을 사용해야하는 경우.

CursorAdapter: The Cursor must include a column named "_id" or this class will not work. 

작동하려면 항상 select col1 as _id ...을 발행해야합니다.

테이블 스키마에 _id을 사용하는 것이 좋습니다. 다른 이름으로 사용하고 싶다면 다음과 같이하십시오. select _id, _id as customname ...이므로 _id 열을 다른 이름으로 두 번 선택하십시오.

+0

응답 해 주셔서 감사합니다!하지만 여전히 약간 느립니다. 원래 게시물에서 조언을 사용했는지 확인해 주시면 감사하겠습니다. – Holly

+0

코드는 괜찮지 만 필드가 있어야합니다. ID가 아닌'_ID' – Pentium10

3

원하는 키를 기본 키로 사용할 수 있습니다.

예를 들어 Cursor-query에서 항목을 자동으로 표시하는 CursorAdapter를 사용하려면 _ID라는 정수 열이 있어야합니다 (여기서는 여기에서 사용됨).

그러나 이것이 테이블과 함께 사용할 계획이 아니라면 원하는 것을 할 수 있습니다!

+0

고마워요! 하지만 난 내가 CursorAdapter 필요하므로, 정수가 있어야 할 것 같아요. 건배. INT _ID를 가질 수는 있지만 정말로 사용하지 마십시오. 즉 "이 텍스트 열이 =="음식 "인 전체 레코드를 검색 할 수 있습니까? 어쨌든 도움에 감사드립니다. – Holly

0

_id 형식은 sqlite create (Java의 경우 long) 형식이어야합니다. 여러 클래스가이를 가정합니다. 따라서 기본 키에 UUID를 사용할 수 없습니다.