Statement 和 PreparedStatement之间的关系和区别.
关系:PreparedStatement继承自Statement,都是接口
区别:
1.PreparedStatement是预编译的,对于批量处理可以大大 提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理
4.执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
5.PreparedStatement可重复使用,提高效率;另外还可防止注入攻击,例如用户登录的时候查询SQL拼装语句为:
String sql = “select * from tb_user where name = '” + username + “’ and password = '” + password + “’”;
假如程序中没有进行必要的输入合法性检测,别有用心的人在用户名栏输入:abc’ or ‘1’='1,在密码栏输入:123,则拼装后的SQL语句为:select * from tb_user where name = ‘abc’ or ‘1’=‘1’ and password = ‘123’,则此语句永远都能正确执行,从而实现注入方式攻击。如果使用PreparedStatement,则会将输入的内容全部解析为字符串,而不会出现此漏洞。
String sql = “select * from tb_user where name = ? and password = ?”;
、
2.面向对象封装
1面向对象:更强调解决问题的主体,更强调谁来解决这个问题,更强调的是对象,面向对象的编程思路:自顶向上,不断拼装
2.封装,它也是面向对象思想的特征之一。面向对象共有三个特征:封装,继承,多态。
封装的好处:
1.提高代码的复用性
2.隐藏了实现细节,还对外提供了可访问的方式,便于调用者使用。
3.提高了安全性。