2017-04-17 74 views
1

如何在Android中使用CREATE VIEW编号?如何在Android中使用SQL CREATE VIEW编号?

主键(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 

我想创建和使用列表视图中显示的看法是:

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

如果您使用自己的布局和客户端汤姆BaseAdapterCursorAdapter那么你就不会遇到错误,

,但如果你正在使用的Android提供布局(android.R.layout.simple_list_item_1)和适配器等(SimpleCursorAdapter),那么你会遇到错误。

如果你不打扰_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是否也更新或保持不变? –

+0

@Ni Yao,它会自动在视图中更新_id以及在执行时在原始查询中自动更新_id –