所以我试图理解准备好的语句是如何处理的?我有这个代码,但我不确定它是否使用预准备语句或如何向其添加预准备语句。
代码:
/*
* Creating a word
*/
public long createword(DatabaseWords word) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_DICTIONARYID, word.get_dictionaryId());
values.put(KEY_WORD1, word.get_word1());
values.put(KEY_WORD2, word.get_word2());
values.put(KEY_WORD3, word.get_word3());
values.put(KEY_WORD4, word.get_word4());
// insert row
long word_id = db.insert(TABLE_WORDS, null, values);
return word_id;
}
如何将准备好的语句包含在A中,使其更快,B。防止对db的攻击
答案 0 :(得分:2)
是的,insert()
使用预备语句:sqlite_prepare_v2()
来编译SQL,然后sqlite3_bind_*()
来绑定来自ContentValues
的参数。这可以防止通常的SQL注入攻击。
要使用预准备语句进行性能,即只进行一次SQL编译,并对具有不同绑定参数的多个查询重用相同的预准备语句,请参阅SQLiteDatabase.compileStatement()
和SQLiteStatement
。