2017-04-17 15 views
1

Android에서 CREATE VIEW의 ID 번호 매기기는 어떻게 작동합니까?안드로이드에서 SQL CREATE VIEW를 사용한 ID 번호 매기기는 어떻게 작동합니까?

기본 키 (id)는 자동 생성되거나 오류가 발생합니까?
는 (내가 커서 로더에이보기를로드하려고 시도합니다.)


코드를 내 거래 테이블을 만들 :

public static final String TABLE_TRANSACTIONS = "transactions"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_PAYEE = "payee"; 
public static final String COLUMN_AMOUNT = "amount"; 
public static final String COLUMN_CATEGORY = "category"; 
public static final String COLUMN_MONTH = "month"; 

public void onCreate(SQLiteDatabase db) { 
    String sqlQueryTransactions = "CREATE TABLE " + TABLE_TRANSACTIONS + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      COLUMN_PAYEE + " TEXT, " + 
      COLUMN_AMOUNT + " TEXT, " + 
      COLUMN_CATEGORY + " TEXT, " + 
      COLUMN_MONTH + " TEXT " + 
      ")"; 
    db.execSQL(sqlQueryTransactions); 
} 

이 테이블의 샘플입니다 다음과 같이 :

id payee  amount month  
1 Tom   90  March 
3 Tom   66  April 
4 Tom   89  May 
10 Jasmine  125  April 
11 Nancy  151  March 
12 Jasmine  175  April 
13 Nancy  152  April 

내가 만들고 목록보기에 표시하는 데 사용할 VIEW는 다음과 같습니다

payee March April May 
Tom  90  66  89 
Jasmine --  300  -- 
Nancy 151  152  -- 

이보기는 다음과 같은 SQL 쿼리로 생성됩니다

SELECT `payee` 
    , SUM(CASE WHEN `month` = 'March' THEN `amount` END) AS `March` 
    , SUM(CASE WHEN `month` = 'April' THEN `amount` END) AS `April` 
    , SUM(CASE WHEN `month` = 'May' THEN `amount` END) AS `May` 
    FROM `transactions` 
    GROUP BY `payee`; 
+0

"ID 번호 지정"이란 무엇을 의미합니까? ID 열은 다른 열과 마찬가지로이 열의 일부가 아닙니다. –

답변

1

자신의 레이아웃과 cus를 사용하는 경우 톰 BaseAdapter 또는 CursorAdapter 다음 당신은 오류로

실행되지 않습니다하지만 당신은 (SimpleCursorAdapter)처럼 안드로이드에서 제공 레이아웃 (android.R.layout.simple_list_item_1)와 어댑터를 사용하는 경우, 당신은 오류로 실행됩니다.

표시 할 _id 또는 운영자 기반에 대해 신경 쓰지 않으면 검색어에 열을 추가하고 Android 및 기본 어댑터의 기본 레이아웃도 사용하십시오. 필요에 따라이 같은

당신은 당신의보기

create view payee_of_MAM as SELECT _id,payee, 
     SUM(CASE WHEN month = 'March' THEN amount END) AS March, 
     SUM(CASE WHEN month = 'April' THEN amount END) AS April, 
     SUM(CASE WHEN month = 'May' THEN amount END) AS May 
    FROM transactions 
GROUP BY payee; 

을 만들거나 그래서이 당이

같은 기본 키를 얻을 것이다에만

SELECT _id,payee, 
      SUM(CASE WHEN month = 'March' THEN amount END) AS March, 
      SUM(CASE WHEN month = 'April' THEN amount END) AS April, 
      SUM(CASE WHEN month = 'May' THEN amount END) AS May 
     FROM transactions 
    GROUP BY payee; 

같은 쿼리를 사용할 수 있습니다

_id payee March April May 
12  Jasmine   300  
13  Nancy 151  152  
4  Tom  90  66  89 

그리고 단순히 커서를 지나치기 만하면 Android의 기본 레이아웃과 어댑터를 사용할 수 있습니다.

하지만 _id는 테이블에있는 레코드의 마지막 항목과 동일합니다.

+0

이 질문에 대한 답변입니다. 추가 답변으로서 기본 키가 금액과 같이 자동 업데이트됩니까? ID가 마지막 항목의 ID라고하면 새 항목이 트랜잭션 테이블에 추가 될 때 ID도 업데이트되거나 동일하게 유지됩니까? –

+0

@ Ni Yao, uid를 실행하면 원시 uid뿐만 아니라보기에서도 자동으로 _id를 업데이트합니다 –