我正在执行以下操作以将信息插入数据库:
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 entry WHERE ent_seq = 1157170,如下所示:
id | word_fk | tag_id
52 SELECT id FROM entry WHERE ent_seq = 1157170 4
我打算将 word_fk 设置为从子查询返回的任何值,但似乎 insert()
在将信息插入到一个数据库。我猜这与 SQL 输入清理有关?无论如何,我该如何使这个 insert() 查询起作用?
最佳答案
I intended for word_fk to be set to whatever is returned from the subquery, but it seems as though insert() doesn't execute subqueries when it inserts information into a database. I guess it's related to SQL input sanitization?
ContentValues
对象是一些列和值之间的简单映射,因此您不能真正使用它来进行子查询,数据按原样使用。
但是,您似乎控制了 ContentProvider
所以我不明白为什么您不能简单地从 ContentValues
中提取子查询 >insert()
方法从 word_fk
键进一步直接使用它来获取你想要的。另一种方法是要求传递给提供者的 insert()
方法的 Uri
必须包含一个额外的标识符(ent_seq
参数您的示例)如果 word_fk
出现在所用的 ContentValues
中。
关于android - 如何通过我的 ContentProvider 在 insert() 命令中使用子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819335/