使用 ContentProvider 插入时的 CASE 表达式
CASE expression in insert with ContentProvider
我访问了 sqlfiddle.com 并做了一些测试。
我想得到一个 SQL 语句,让我插入一行,并有一个字段(下面称为 active),其值取决于 table是否为空
我使用了以下架构:
CREATE TABLE kids (
identifier INTEGER PRIMARY KEY,
name VARCHAR,
surname VARCHAR,
active INTEGER);
INSERT INTO
kids
VALUES
(1, "name1", "surname1", CASE WHEN EXISTS (SELECT * FROM kids) THEN 0 ELSE 1 END);
INSERT INTO
kids
VALUES
(2, "name2", "surname2", CASE WHEN EXISTS (SELECT * FROM kids) THEN 0 ELSE 1 END);
我在执行 SELECT * FROM kids
时得到以下结果:
+---+-------+----------+---+
| 1 | name1 | surname1 | 1 |
+---+-------+----------+---+
| 2 | name2 | surname2 | 0 |
+---+-------+----------+---+
这太完美了。问题是,如何使用 SQLite
和 ContentProviders
在 Android
中执行此 insert? insert(在 ContentProviders
和 SQLite
实例上都将 ContentValues
作为参数,我不能在那里添加子查询,它将是从字面上看和写。
这有可能实现吗?如果你能想到其他的方法,也欢迎。
谢谢。
ContentValues
确保它的内容永远不会被解释为 SQL,所以这是不可能的。
除非您确实需要向其他应用提供数据,否则不要使用内容提供程序。 (如果您需要将数据提供给其他应用程序,让它们执行任意操作是个坏主意SQL。)
实现您的要求的另一种方法是在插入之前检查基础字段的值,然后将整个数据连同计算值一起插入活动字段
我访问了 sqlfiddle.com 并做了一些测试。
我想得到一个 SQL 语句,让我插入一行,并有一个字段(下面称为 active),其值取决于 table是否为空
我使用了以下架构:
CREATE TABLE kids (
identifier INTEGER PRIMARY KEY,
name VARCHAR,
surname VARCHAR,
active INTEGER);
INSERT INTO
kids
VALUES
(1, "name1", "surname1", CASE WHEN EXISTS (SELECT * FROM kids) THEN 0 ELSE 1 END);
INSERT INTO
kids
VALUES
(2, "name2", "surname2", CASE WHEN EXISTS (SELECT * FROM kids) THEN 0 ELSE 1 END);
我在执行 SELECT * FROM kids
时得到以下结果:
+---+-------+----------+---+
| 1 | name1 | surname1 | 1 |
+---+-------+----------+---+
| 2 | name2 | surname2 | 0 |
+---+-------+----------+---+
这太完美了。问题是,如何使用 SQLite
和 ContentProviders
在 Android
中执行此 insert? insert(在 ContentProviders
和 SQLite
实例上都将 ContentValues
作为参数,我不能在那里添加子查询,它将是从字面上看和写。
这有可能实现吗?如果你能想到其他的方法,也欢迎。
谢谢。
ContentValues
确保它的内容永远不会被解释为 SQL,所以这是不可能的。
除非您确实需要向其他应用提供数据,否则不要使用内容提供程序。 (如果您需要将数据提供给其他应用程序,让它们执行任意操作是个坏主意SQL。)
实现您的要求的另一种方法是在插入之前检查基础字段的值,然后将整个数据连同计算值一起插入活动字段