SQL CREATE VIEW 的 id 编号在 Android 中如何工作?

How does the id numbering with SQL CREATE VIEW work in Android?

CREATE VIEW 中的 ID 编号在 Android 中如何工作?

主键 (id) 会自动生成,还是会 运行 出错?
(我将尝试将此视图加载到游标加载器中。)


创建我的交易的代码table:

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);
}

Table的样本如下:

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`;

如果您使用自己的布局和自定义 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 将根据您 table

中记录的最后一个条目