为什么在 Android Studio 中更新或删除 SQLite 数据库中的项目时使用 "new String[] { }"?

Why is "new String[] { }" used while updating or deleting an item in SQLite database in Android Studio?

new String[] { } 用于更新和删除 SQLite 数据库中的项目,例如:

首先,创建 table:

db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT)");

更新项目:

db.update(TABLE_NAME, contentValues, "ID = ?",new String[] {id});

正在删除一个项目:

db.delete(TABLE_NAME, "ID = ?",new String[] {id});

此处,ID 在数据库中创建 table 时是一个 INTEGER。但是,虽然 updating/deleting 任何项目,id 已经是一个 String,那么我们为什么要使用 new String[] {id}?

您提到的参数 new String[] {id} 用于 WHERE 子句 arguments.It 在您使用 WHERE 子句时很有帮助。这些东西有助于提供论据。 如需进一步说明,您可以访问下方 link:

Where clause argument while using delete query

这是个好问题。

为什么要新建 String[] {id}?

这里new String[] {id}是String数组的初始化,需要数组,因为参数个数可以是一个也可以是多个

为什么这个数组是String类型的?

我们传给query的参数可以是integer/float/string中的任何一个,就是trivial/easy/human-readable转换成integer/float String 但不是 vice-versa。在 Java 中,代码必须被修复(不像 Python),因此创作者必须坚持使用 String,我猜。

奖金:

这种SQL查询生成方式(而不是直接写查询)被称为prepared-statements/Parameterized-Queries,是对抗SQL-Injection.

的好方法

4.2. Type Conversions Prior To Comparison 中所述,在此比较之前 ID = ?,对于您传递的参数,尽管它是一个字符串,但应用了 NUMERIC 亲和力,因为列IDINTEGER 亲和力。

所以规范是:你总是传递一个字符串参数,但是当执行 sql 语句时,这个字符串参数将隐式 converted/treated 作为字符串,如果它与字符串进行比较(具有 TEXT 亲和力的列),或与数字进行比较的数字(具有 INTEGERNUMERIC 亲和力的列)。