だから私は準備されたステートメントが正確にどのように扱われるかを理解しようとしていますか?私はこのコードを持っていますが、プリペアドステートメントを使用しているかどうか、またはプリペアドステートメントを追加する方法がわかりません。
コード:
/*
* 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。データベースへの攻撃を防ぐにはどうすればよいですか?
はい、insert()
内部でプリペアドステートメントを使用sqlite_prepare_v2()
します:SQLをコンパイルしてsqlite3_bind_*()
から、からの引数をバインドしますContentValues
。これにより、通常のSQLインジェクション攻撃が防止されます。
パフォーマンスのためにプリペアドステートメントを使用するには、つまりSQLコンパイルを1回だけ実行し、バインド引数が異なる複数のクエリに対して同じプリペアドステートメントを再利用するにはSQLiteDatabase.compileStatement()
、およびを参照してくださいSQLiteStatement
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加