ContentResolver 查询中“='1'”的含义和目的
Meaning and Purpose of " = '1' " in ContentResolver Query
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER " + " = '1''";
String[] selectionArgs = String.valueOf(1);
为什么我们在选择查询中放入 " = '1' "
?
以及 String.valueOf(1);
的原因
你可能是这个意思:
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?";
String[] selectionArgs = new String[]{String.valueOf(1)};
或这个
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?";
String[] selectionArgs = new String[]{"1"};
或这个
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'";
String[] selectionArgs = null;
或者只是这个
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1";
String[] selectionArgs = null;
所有四个 select 离子具有相同的结果:具有 phone 编号的接触。
SQLite(在 Android 上使用的数据库类型)不支持布尔值(参见 Datatypes in SQLite Version 3),true
和 false
是通常存储为整数 1
和 0
。因此,要检查布尔字段是否为真,您需要检查它是否具有值 1
.
代码片段 #1 和 #2 使用 prepared statement,其中包含一个参数或占位符,该参数或占位符已替换为 selectionArgs
数组的第一个值(因为它是查询中的第一个参数)。这是一种防止 SQL 注入的技术,它通常使您的查询更具可读性。
selectionArgs
必须是 String
值的数组,因此代码段 #1 中的整数值 1
需要首先转换为 String
(使用 String.valueOf(int)
实际上只有当你传递一个变量而不是一个常量时才有意义。
如果您不在 select 语句中使用任何变量,您可以将所有值插入到语句中,而不使用占位符和 selectionArgs
,如代码片段 #3 和 #4 中所示。由于 SQLite 是动态类型的,因此无论您检查 1
还是 '1'
是否相等都没有关系,SQL 解释器将以任何一种方式正确处理。
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER " + " = '1''";
String[] selectionArgs = String.valueOf(1);
为什么我们在选择查询中放入 " = '1' "
?
以及 String.valueOf(1);
你可能是这个意思:
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?";
String[] selectionArgs = new String[]{String.valueOf(1)};
或这个
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?";
String[] selectionArgs = new String[]{"1"};
或这个
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'";
String[] selectionArgs = null;
或者只是这个
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1";
String[] selectionArgs = null;
所有四个 select 离子具有相同的结果:具有 phone 编号的接触。
SQLite(在 Android 上使用的数据库类型)不支持布尔值(参见 Datatypes in SQLite Version 3),true
和 false
是通常存储为整数 1
和 0
。因此,要检查布尔字段是否为真,您需要检查它是否具有值 1
.
代码片段 #1 和 #2 使用 prepared statement,其中包含一个参数或占位符,该参数或占位符已替换为 selectionArgs
数组的第一个值(因为它是查询中的第一个参数)。这是一种防止 SQL 注入的技术,它通常使您的查询更具可读性。
selectionArgs
必须是 String
值的数组,因此代码段 #1 中的整数值 1
需要首先转换为 String
(使用 String.valueOf(int)
实际上只有当你传递一个变量而不是一个常量时才有意义。
如果您不在 select 语句中使用任何变量,您可以将所有值插入到语句中,而不使用占位符和 selectionArgs
,如代码片段 #3 和 #4 中所示。由于 SQLite 是动态类型的,因此无论您检查 1
还是 '1'
是否相等都没有关系,SQL 解释器将以任何一种方式正确处理。