我是android开发的初学者。 我有个问题。什么是?用于下面解释的术语?我是从android开发者的文档中得到的。
public int update(String table,ContentValues values,String whereClause,String [] whereArgs)
在API级别1中添加 更新数据库中行的便捷方法。
参数 表格要更新的表格 将列映射从列名称到新列值。 null是将转换为NULL的有效值。 whereClause在更新时应用可选的WHERE子句。传递null将更新所有行。 whereArgs你可以在where子句中包含?,它将被whereArgs中的值替换。这些值将绑定为字符串。 返回 受影响的行数
答案 0 :(得分:2)
基本上是一个稍后要填写的变量。您应该在任何地方使用这些数据来自用户,文件或其他未硬编码到应用程序中的内容。为什么?因为它可以防止SQL注入导致的安全问题。变量本身不能是SQL,也不会被数据库解析为SQL。因此,如果从用户发送到数据库的所有变量都是绑定变量,则从应用程序中删除整个安全类问题。
答案 1 :(得分:1)
PreparedStatement
支持名为bind variables的机制。例如,
SELECT * FROM table WHERE id = ?
在上面的查询中,id有一个绑定参数。您可以使用它(以获得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();
}
答案 2 :(得分:0)
每个?按顺序对应于方法的最后String[] whereArgs
参数中传递的sql参数的索引
public int update (table, values, "age > ? AND age < ?", new String[] { "18", "25"});
答案 3 :(得分:0)
文档意味着使用'?'在whereClause语句中。简单的例子:
rawQuery("select * from todo where _id = ?", new String[] { id });
从上面的陈述中,执行期间,?将被变量id的值替换。
此机制有助于防止SQL注入。