【问题标题】:How does the id numbering with SQL CREATE VIEW work in Android?SQL CREATE VIEW 的 id 编号如何在 Android 中工作?
【发布时间】:2017-09-13 14:24:42
【问题描述】:

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

主键 (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 查询生成此 VIEW:

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

【问题讨论】:

  • “ID 编号”是什么意思? ID 列与其他列一样,不属于此视图。

标签: sql sqlite android-studio cursor sql-view


【解决方案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 将根据您表中记录的最后一个条目

【讨论】:

  • 这确实回答了我的问题。作为后续,主键是否像金额一样自动更新?如果你说 id 是最后一个条目的,那么当新条目添加到 transactions 表时,id 是否也会更新或保持不变?
  • @Ni Yao,当你执行它时,它会在视图和原始查询中自动更新_id
猜你喜欢
  • 2013-09-03
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2015-10-30
  • 2015-11-28
相关资源
最近更新 更多