JDBC 中使用Statement 和 PreparedStatement的区别

JDBC 中使用Statement 和 PreparedStatement的区别

1,PreparedStatement是预编译的SQL语句,效率高于Statement。尤其执行复杂SQL语句或频繁执行某一SQL时,执行效率优势更明显。

2,PreparedStatement是支持参数化操作的,相比于Statement使用字符串连接阻止SQL语句更加灵活。可读性更好

3,PreparedStatement可以防止SQL注入,安全性高于Statement

示例:statement

使用:PreparedSatement

Statement在运行时要经过两个步骤:

  • 1,java会把SQL字符串进行解析,区分哪里是字段、条件、表名等

  • 2,根据解析的SQL语句,执行SQL

(也就意味着,如果我们执行了10万次,就要解析sql语句10万遍)

而,PreparedStatement中:如果需要执行10万遍SQL,只需要解析一次SQL语句就可以了。而且会将解析的sql语句保存到数据库底层的内存中,当这条SQL再次执行时,只要把对应的数据传递到解析好的结果中就可以了。

SQL注入风险:SQL注入是专门针对Statement设计的。因为其是靠字符串拼接创建SQL语句的。所以对特殊字符没有做任何处理。

而PrepareStatement则会将敏感字符处理掉,将其整体作为人名进行查询