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

Android 如何通过ContentProvider在insert()命令中使用子查询?,android,android-sqlite,android-contentprovider,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 = conten

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

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\u fk按字面意思被设置为SELECT id FROM entry,其中ent\u seq=1157170,如下所示:

id  |   word_fk                                         |   tag_id
52      SELECT id FROM entry WHERE ent_seq = 1157170        4
我打算将word\u fk设置为从子查询返回的任何内容,但似乎
insert()
在将信息插入数据库时不执行子查询。我猜这与SQL输入清理有关?在任何情况下,如何使这个insert()查询工作

我打算将word_fk设置为从 子查询,但insert()似乎不执行子查询 当它将信息插入数据库时。我想这和 SQL输入清理

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


但是,您似乎控制了
ContentProvider
,因此我不明白为什么您不能从
word\u fk
键的
insert()
方法中传递的
ContentValues
中提取子查询,然后直接使用它来获取所需内容。另一种方法是要求传递给提供者的
insert()
方法的
Uri
必须包含一个额外的标识符(示例中的
ent\u seq
参数),如果
单词fk
出现在所使用的
ContentValues
中。

啊,这是一个很好的观点。我可以在
的前面添加一个特殊字符,表示需要在子查询中运行它。如果insert()检测到这个特殊字符,那么它将知道首先运行子查询,并在将值插入数据库之前相应地更新ContentValue。