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。