2015-06-11 59 views
-4

我是android開發的初學者。 我有一個問題。什麼是?s用於下面解釋的術語?我從android開發人員的文檔中得到它。用於更新SQLiteDatabase的術語是什麼?

公衆詮釋更新(字符串表,ContentValues值,字符串whereClause,字符串[] whereArgs)

在API級別1 用於更新數據庫中的行的便捷方法。

參數 表在 中更新表的值爲從列名到新列值的映射。 null是一個將被轉換爲NULL的有效值。 whereClause更新時應用可選的WHERE子句。傳遞null將更新所有行。 whereArgs您可能在where子句中包含?s,它將被來自whereArgs的值替換。這些值將被綁定爲字符串。 返回 受影響的行數

回答

1

A 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(); 
} 
0

每一個?對應,爲了以所述方法中的最後一個參數String[] whereArgs

public int update (table, values, "age > ? AND age < ?", new String[] { "18", "25"}); 
2

基本上其可變稍後填充在通過SQL參數的索引。數據來自用戶,文件或任何其他未硬編碼到應用程序中的應用程序,您應該使用這些數據。爲什麼?因爲它可以防止由於SQL注入造成的安全問題。這些變量本身不能是SQL,也不會被數據庫解析爲SQL。因此,如果從用戶發送到數據庫的所有變量都是綁定變量,則可以從應用程序中刪除整個類的安全問題。

0

該文檔意味着字面上使用'?'在whereClause聲明中。簡單的例子:

rawQuery("select * from todo where _id = ?", new String[] { id }); 

從上面的語句,在執行過程中,將被變量id的值替換。

此機制有助於防止SQL注入。