Java 更新SQLITE数据库时使用的术语是什么?

Java 更新SQLITE数据库时使用的术语是什么?,java,android,Java,Android,我是android开发的初学者。 我有个问题。在下面的解释中,?s这个术语是用来做什么的?我是从android开发者的文档中得到的 公共int更新(字符串表、ContentValues值、字符串where子句、字符串[]wherergs) 在API级别1中添加 更新数据库中行的方便方法 参数 表中要更新的表 值从列名到新列值的映射。null是将转换为null的有效值。 WHERE子句更新时应用的可选WHERE子句。传递null将更新所有行。 wherergs您可以在where子句中包含?s,该子

我是android开发的初学者。 我有个问题。在下面的解释中,?s这个术语是用来做什么的?我是从android开发者的文档中得到的

公共int更新(字符串表、ContentValues值、字符串where子句、字符串[]wherergs)

在API级别1中添加 更新数据库中行的方便方法

参数 表中要更新的表 值从列名到新列值的映射。null是将转换为null的有效值。 WHERE子句更新时应用的可选WHERE子句。传递null将更新所有行。 wherergs您可以在where子句中包含?s,该子句将被wherergs中的值替换。这些值将被绑定为字符串。 退换商品 受影响的行数支持一种称为的机制。比如说,

SELECT * FROM table WHERE id = ?
在上面的查询中,id只有一个bind参数。您可以使用它(获取
id
100
的行)进行如下操作

String sql = "SELECT * FROM table WHERE id = ?";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
    ps.setInt(1, 100);
    try (ResultSet rs = ps.executeQuery()) {
        if (rs.next()) {

        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}

每个人?按顺序对应于在方法的最后一个
字符串[]中传递的sql参数的索引,其中rgs
参数

public int update (table, values, "age > ? AND age < ?", new String[] { "18", "25"});
公共int更新(表,值,“年龄>和年龄<?”,新字符串[]{“18”,“25”});

基本上这是一个待以后填写的变量。如果数据来自用户、文件或其他未硬编码到应用程序中的内容,则应在任何地方使用这些。为什么?因为它可以防止SQL注入带来的安全问题。变量本身不能是SQL,数据库不会将其解析为SQL。因此,如果从用户发送到db的所有变量都是绑定变量,那么您就可以从应用程序中删除整个类别的安全问题。

文档的意思是在where子句语句中使用“?”。简单的例子:

rawQuery("select * from todo where _id = ?", new String[] { id }); 
根据上述声明,在执行过程中?将替换为变量id的值

此机制有助于防止SQL注入