面试题答案
一键面试- 防止SQL注入攻击:
- 原因:PreparedStatement使用占位符(
?
)来代替实际参数,数据库会将占位符作为一个整体进行编译,而不是将用户输入的内容作为SQL语句的一部分。这样,恶意用户无法通过构造特殊的输入来改变SQL语句的逻辑,从而有效防止了SQL注入攻击。例如,普通Statement在处理用户输入时,如果用户输入'; DROP TABLE users; --
,可能会导致表被误删除,而PreparedStatement会将该输入作为普通字符串处理,不会执行恶意的SQL语句。
- 原因:PreparedStatement使用占位符(
- 提高性能:
- 原因:数据库会对SQL语句进行编译和缓存。当使用PreparedStatement时,相同结构的SQL语句(仅占位符不同)只需要编译一次,后续使用不同参数执行时可以直接从缓存中获取编译后的执行计划,减少了编译的开销。而普通Statement每次执行不同参数的SQL语句时都需要重新编译,性能相对较低。
- 代码可读性和维护性更好:
- 原因:PreparedStatement将SQL语句和参数分离,使得SQL语句的结构更加清晰。代码中可以更直观地看到SQL语句的逻辑,而参数的设置也在单独的部分,便于理解和修改。例如,对于复杂的SQL查询,使用PreparedStatement可以让开发人员更专注于SQL语句的逻辑,而参数的传递和设置也更有条理,方便后续的维护和调试。