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

标签 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 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/

相关文章:

java - 样式 toast 背景 - 找不到与给定名称匹配的资源

php - 是否可以从 MySQL 数据库加载坐标并在 Android 谷歌地图中显示为标记

android - Recyclerview + 内容提供者 + CursorLoader

android - 如何在任何 Android 手机中查找和收集给定联系人中的所有可用信息?

android - 使用 openGL 中的触摸屏控制 3D 对象的旋转

android - 在应用程序外显示 android 对话框

android - SQLiteOpenHelper onCreate()/onUpgrade() 什么时候运行?

sqlite - 在 SQLite 中自动生成复合键

java - Android:存储在 SQLite 中时图像的字节数组为空

java - 在 Android 应用程序之间共享数据的最佳实践