Android SQLiteDatabase.query是否使用PreparedStatements?
当我在Android中使用用户输入查询数据库时,我通常使用SelectionArgs,并正确使用SelectionArgsAndroid SQLiteDatabase.query是否使用PreparedStatements?,android,sqlite,prepared-statement,Android,Sqlite,Prepared Statement,当我在Android中使用用户输入查询数据库时,我通常使用SelectionArgs,并正确使用SelectionArgs Cursor cursor = db.query(UserEntity.TABLE, new String[]{UserEntity.COLUMN_ID, UserEntity.COLUMN_USERNAME, UserEntity.COLUMN_FIRSTNAME,UserEntity.COLUMN_LASTNAME,...},
Cursor cursor = db.query(UserEntity.TABLE,
new String[]{UserEntity.COLUMN_ID, UserEntity.COLUMN_USERNAME, UserEntity.COLUMN_FIRSTNAME,UserEntity.COLUMN_LASTNAME,...},
UserEntity.COLUMN_USERNAME + "=?",
new String[]{username},
null, null, null);
这足以防止SQL注入吗?或者我应该使用事先准备好的报表 使用prepared语句的建议来自PHP,在PHP中,一些旧API不允许使用SQL参数(
?
),除非使用prepared语句
但是参数和准备好的语句是正交的概念。为了防止注入(并避免字符串/blob格式问题),您只需要参数。(而query()
提供了这一点。)
准备好的语句只有在需要多次执行时才有用
(碰巧,query()
确实在内部使用了一个准备好的语句,但这是SQLite API的结果,您不必担心。)