java - 为什么在 Android Studio 中更新或删除 SQLite 数据库中的项目时使用“new String[] {}”?
问题描述
new String[] { }在从SQLite数据库更新和删除项目时使用,例如:
首先,创建表:
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
是一个INTEGER 。但是,在更新/删除任何项目时,id
已经是一个String,那么我们为什么要使用new String[] {id}?
解决方案
这是一个很好的问题。
为什么是 new String[] {id} ?
这里new String[] {id}是一个String数组的初始化,需要一个数组,因为参数的个数可以是一个也可以是多个。
为什么这个数组是 String 类型的?
我们传递给查询的参数可以是integer/float/string之间的任何参数,将integer/float转换为String是微不足道的/容易的/人类可读的,但反之则不然。在 Java 中,代码必须是固定的(与 Python 不同),因此我猜创作者必须坚持使用String 。
奖金:
这种 SQL 查询生成方式(而不是直接编写查询)称为prepared-statements/Parameterized-Queries,是对抗SQL-Injection 的好方法。
推荐阅读
- google-apps-script - 将 Google App Script 权限限制为仅访问它创建的文件
- c# - 如何在 VPC 上部署 Azure 应用服务
- c# - 在 Xamarin.Forms 中使用 android 包管理器
- html - Python Tornado 不会加载 .Css 文件
- javascript - 查询大量数据,减少html表的加载时间| PHP、HTML、SQLSERVER 2012
- python-3.x - AttributeError:模块“rethinkdb”没有属性“连接”
- javascript - 用同位素保存复选框状态
- ios - 从 BLE 数据包中解包字节数组
- c++ - 解释增量运算符
- ubuntu-server - 创建对主目录只有读/写权限的 ubuntu 服务器用户