面试题答案
一键面试安全性
- 防止SQL注入:Statement在拼接SQL语句时,如果参数来自用户输入且未经过严格过滤,很容易遭受SQL注入攻击。例如,若用户输入
'; DROP TABLE users; --
作为用户名,拼接后的SQL可能会执行非预期的删除表操作。而PreparedStatement使用占位符?
,数据库会将参数作为数据处理而非SQL语句的一部分,从而有效防止这种攻击。
性能
- 预编译机制:PreparedStatement会在执行前对SQL语句进行预编译并缓存。当多次执行相同结构但参数不同的SQL时,无需重复编译,直接使用缓存的执行计划,提高了执行效率。例如在批量插入数据时,Statement每次都需要重新编译SQL语句,而PreparedStatement只编译一次。
代码维护性
- 清晰简洁:PreparedStatement通过占位符
?
来表示参数,代码中SQL语句结构更清晰,参数传递一目了然。相比之下,Statement拼接字符串的方式在参数较多时,代码可读性变差,维护难度增加。例如,对于复杂的查询语句,使用Statement拼接参数可能导致代码冗长且易出错,而PreparedStatement的方式更简洁明了,便于后续维护和修改。