在我的数据库驱动的应用程序中,我需要对查询执行插入操作,其中一个或多个字段的值来自子查询。
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语句的查询。
有没有办法实现这个目标?
答案 0 :(得分:0)
ContentValues
容器的要点是能够安全地使用字符串而不将它们解释为SQL命令。
无法使用insert()
的子查询。从另一个表获取值的唯一方法是执行单独的查询;在这种情况下,ThisIsAQuery()
将为stringForQuery()或longForQuery()。