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`;
如果您使用自己的布局和自定义 BaseAdapter
或 CursorAdapter
那么您将不会 运行 出错,
但是如果您使用 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
中记录的最后一个条目
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`;
如果您使用自己的布局和自定义 BaseAdapter
或 CursorAdapter
那么您将不会 运行 出错,
但是如果您使用 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
中记录的最后一个条目