如何通过ContentProvider在insert()命令中使用子查询?

时间:2013-11-06 17:59:45

标签: android android-sqlite android-contentprovider

我正在执行以下操作以将信息插入数据库:

ContentValues attachTags = new ContentValues();
attachTags.put("word_fk", "SELECT id FROM entry WHERE ent_seq = " + String.valueOf(line).substring(1));
attachTags.put("tag_id", gTagID);

// Insert the record
Uri insertUri = contentProvider.insert(Uri.parse(mContentProvider.CONTENT_URI + mContentProvider.PATH_SET_TAGS_ON_WORD), attachTags);

不幸的是, word_fk 字面上设置为 SELECT id FROM条目WHERE ent_seq = 1157170 ,如下所示:

id  |   word_fk                                         |   tag_id
52      SELECT id FROM entry WHERE ent_seq = 1157170        4

我打算将<​​strong> word_fk 设置为从子查询返回的任何内容,但似乎insert()在将信息插入数据库时​​不执行子查询。我想这与SQL输入清理相关?在任何情况下,如何使这个insert()查询工作?

1 个答案:

答案 0 :(得分:1)

  

我打算将word_fk设置为从...返回的任何内容   子查询,但似乎insert()不执行子查询   何时将信息插入数据库。我想这与它有关   SQL输入清理?

ContentValues对象是某些列和值之间的简单映射,因此您无法真正使用它来进行子查询,数据按原样使用。

但是,您似乎控制了ContentProvider所以我不明白为什么您不能简单地从ContentValues方法中传递的insert()中提取子查询word_fk键并进一步直接使用它来获得您想要的内容。另一种方法是要求传递给提供者的Uri方法的insert()必须包含额外的标识符(示例中为ent_seq参数),如果word_fk是出现在ContentValues中。