Android 中数据库查询方法query() 中的select
Android 中涉及数据库查询的地方一般都会有一个query() 方法,而这些query 中有大都(全部?)会有一个参数selectionArgs,比如下面这个
android.database.sqlite.SQLiteDatabase.query():
view plaincopy to clipboardprint?
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
selection 参数很好理解,就是SQL 语句中WHERE 后面的部分,即过滤条件,比如可以为id=3 AND name='Kevin Yuan' 表示只返回满足id 为 3 且name 为"Kevin Yuan" 的记录。
再实际项目中像上面那样简单的“静态”的selection 并不多见,更多的情况下要在运行时动态生成这个字符串,比如
view plaincopy to clipboardprint?
public doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name='" + name + "'", // selection
//...... 更多参数省略
);
}
public doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name='" + name + "'", // selection
//...... 更多参数省略
);
}
在这种情况下就要考虑一个字符转义的问题,比如如果在上面代码中传进来的name 参数的内容里面有单引号('),就会引发一个"SQLiteException syntax error .... "。
手工处理转义的话,也不麻烦,就是place() 调用而已。但是Android SDK 为我们准备了selectionArgs 来专门处理这种问题:
view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name=?", // selection
new String[] {name}, //selectionArgs
//...... 更多参数省略
);
// ...... 更多代码
}
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name=?", // selection
new String[] {name}, //selectionArgs
/
/...... 更多参数省略
);
// ...... 更多代码
}
也就是说我们在selection 中需要嵌入字符串的地方用? 代替,然后在selectionArgs 中依次提供各个用于替换的值就可以了。在query() 执行时会对selectionArgs 中的字符串正确转义并替换到对应的? 处以构成完整的selection 字符串。有点像String.format()。
不过需要注意的是? 并不是“万金油”,只能用在原本应该是字符串出现的地方。比如下面的用法是错误的:
view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"? = " + id + " AND name=?", // selection XXXX 错误!? 不能用来替换字段名
new String[]{"id", name}, //selectionArgs
//...... 更多参数省略
);
// ...... 更多代码
}文- 汉语汉字编辑词条
文,wen,从玄从爻。天地万物的信息产生出来的现象、纹路、轨迹,描绘出了阴阳二气在事物中的运行轨迹和原理。
故文即为符。上古之时,符文一体。
古者伏羲氏之王天下也,始画八卦,造书契,以代结绳(爻)之政,由是文籍生焉。--《尚书序》
依类象形,故谓之文。其后形声相益,即谓之字。--《说文》序》
仓颉造书,形立谓之文,声具谓之字。--《古今通论》
(1) 象形。甲骨文此字象纹理纵横交错形。"文"是汉字的一个部首。本义:花纹;纹理。
(2) 同本义[figure;veins]
文,英语念为:text、article等,从字面意思上就可以理解为文章、文字,与古今中外的各个文学著作中出现的各种文字字形密不可分。古有甲骨文、金文、小篆等,今有宋体、楷体等,都在这一方面突出了"文"的重要性。古今中外,人们对于"文"都有自己不同的认知,从大的方面来讲,它可以用于表示一个民族的文化历史,从小的方面来说它可用于用于表示单独的一个"文"字,可用于表示一段话,也可用于人物的姓氏。
折叠编辑本段基本字义
1〃事物错综所造成的纹理或形象:灿若~锦。
2.刺画花纹:~身。
3〃记录语言的符号:~字。~盲。以~害辞。
4〃用文字记下来以及与之有关的:~凭。~艺。~体。~典。~苑。~献(指有历史价值和参考价值的图书资料)。~采(a〃文辞、文艺方面的才华;b〃错杂艳丽的彩)。
5〃人类劳动成果的总结:~化。~物。
6〃自然界的某些现象:天~。水~。
7〃旧时指礼节仪式:虚~。繁~缛节(过多的礼节仪式)。
8〃文华辞采,与“质”、“情”相对:~质彬彬。
9〃温和:~火。~静。~雅。
10〃指非军事的:~职。~治武功(指礼乐教化和军事功绩)。
11〃指以古汉语为基础的书面语:552~言。~白间杂。
12〃专指社会科学:~科。
13〃掩饰:~过饰非。
14〃量词,指旧时小铜钱:一~不名。
15〃姓。
16〃皇帝谥号,经纬天地曰文;道德博闻曰文;慈惠爱民曰文;愍民惠礼曰文;赐民爵位曰文;勤学好问曰文;博闻多见曰文;忠信接礼曰文;能定典礼曰文;经邦定誉曰文;敏而好学曰文;施而中礼曰文;修德来远曰文;刚柔相济曰文;修治班制曰文;德美才秀曰文;万邦为宪、帝德运广曰文;坚强不暴曰文;徽柔懿恭曰文;圣谟丕显曰文;化成天下曰文;纯穆不已曰文;克嗣徽音曰文;敬直慈惠曰文;与贤同升曰文;绍修圣绪曰文;声教四讫曰文。如汉文帝。
折叠编辑本段字源字形
字源演变与字形比较
折叠编辑本段详细字义
〈名〉
1〃右图是
“文”字的甲骨文图片,资料来源:徐无闻主编:《甲金篆隶大字典》,四川辞书出版社。1991年7月第一版。
“文”字的甲骨文字绘画的像一个正面的“大人”,寓意“大象有形”、“象形”;特别放大了胸部,并在胸部画了“心”,含义是“外界客体在心里面的整体影像、整体写真、整体素描、整体速写”。
许慎《说文解字》把“文”解释为“错画也”,意思是“对事物形象进行整体素描,笔画交错,相联相络,不可解构”,这与他说的独体为文、合体为字的话的意思是一致的。“说文解字”这个书名就表示了“文”只能“说”,而“字”则可“解”的意思。“文”是客观事物外在形象的速写,是人类进一步了解事物内在性质的基础,所以它是“字”的父母,“字”是“文”的孩子。“文”生“字”举例(以“哲”为例):先对人手摩画,其文为“手”;又对斧子摩画,其文为“斤”。以手、斤为父母,结合、生子,其子就是“折”(手和斤各代表父母的基因)。这个“折”就是许慎所谓的“字”。“字”从宀从子,“宀”表示“独立的房子”,子在其中,有“自立门户”的意思。故“字”还能与“文”或其他“字”结合,生出新“字”来。在本例,作为字的“折”与作为文的“口”结合,就生出了新的字“哲”。
2〃
同本义[figure;veins]
文,错画也。象交文。今字作纹。——东汉·许慎《说文》
document有安卓版吗五章以奉五。——春秋·左丘明《左传·昭公二十五年》。注:“青与赤谓之文,赤与白谓之章,白与黑谓之黼,黑与青谓之黻。”
美于黼黼文章。——《荀子·非相》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论