Statement
- SQL语句是拼接形式
- 会产生SQL注入问题
PreparedStatement
- 预编译的Sql执行对象
- 好处:
- 代码可读性更高,不容易出错(因为statement拼接字符串又麻烦又易出错)
- 带有预编译效果,执行效率比statement略高
-
可以避免sql注入, 因为预编译的时候已经sql语句的逻辑固定,替换?进去的内容只能以值的形式体现,如果包含逻辑sql内容 则无效
-
sql中有变量就用preparedStatement 没有变量就用statement
-
推荐使用PreparedStatement
-
SQL注入
select count(*) from t_login where username='sdfsd' and password='' or '1'='1' - 这里的注入代码为 'or '1'='1 1=1为真则绕过验证,跟具体密码是什么没有关系