什么是用于更新SQLiteDatabase的术语?

时间:2015-06-11 22:45:36

标签: java android

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

public int update(String table,ContentValues values,String whereClause,String [] whereArgs)

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

参数 表格要更新的表格 将列映射从列名称到新列值。 null是将转换为NULL的有效值。 whereClause在更新时应用可选的WHERE子句。传递null将更新所有行。 whereArgs你可以在where子句中包含,它将被whereArgs中的值替换。这些值将绑定为字符串。 返回 受影响的行数

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

PreparedStatement支持名为bind variables的机制。例如,

SELECT * FROM table WHERE id = ?

在上面的查询中,id有一个绑定参数。您可以使用它(以获得id100的行)与

之类的内容
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注入。