Android SQLITE使用来自子查询

时间:2017-04-02 08:15:59

标签: sqlite insert subquery

在我的数据库驱动的应用程序中,我需要对查询执行插入操作,其中一个或多个字段的值来自子查询。

insert into语句可能类似于以下示例:

INSERT INTO MyTable (field_1, field_2)
VALUES('value for field 1', (SELECT field_x FROM AnotherTable WHERE ...))

目前我正在手动构建查询:

String MyQuery = "INSERT INTO mytable (field_1, field_2)
    VALUES('value for field 1', (SELECT field_x FROM AnotherTable WHERE ...))"; // Of course my query is far more complex and is built in several steps but the concept is safe, I end up with a SQL String

SQLiteDatabase= db = getWritableDatabase();

db.execSQL(MyQuery); // And it works flawlessy as it was a Swiss Clock

我想做的是:

SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();

values.put("field_1", "value for field 1");
values.put("field_2", ThisIsAQuery("(SELECT field_x FROM AnotherTable WHERE ...)"));

db.insert("MyTable", null, values);
db.close();

假冒方法ThisIsAQuery(...)是缺失的部分,应该告诉查询构建器“SELECT ..”不是值,而是应嵌入insert语句的查询。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

ContentValues容器的要点是能够安全地使用字符串而不将它们解释为SQL命令。

无法使用insert()的子查询。从另一个表获取值的唯一方法是执行单独的查询;在这种情况下,ThisIsAQuery()将为stringForQuery()longForQuery()