您的位置:首页 > 数据库

Statement和PreparedStatement之间的区别(自学时遇到的问题)

2017-11-15 16:35 501 查看
(自学时遇到的问题,写出来以后遇到问题好来查找)

1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. Statement 每执行一次都要对传入的
SQL 语句编译一次,效率较差。

2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。

PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。

3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译,   preparedstatement支持批处理。

4.PreparedStatement 是接口,继承自 Statement 接口

String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′";

stmt.executeUpdate(updateString);

PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");

updateSales.setInt(1, 75);

updateSales.setString(2, "Colombian");

updateSales.executeUpdate();

不会有SQL注入的危险

之前用过,没事多看看

进行数据库插入操作的时候使用 PreparedStatement 更好,好处如下:
 1.PreparedStatement可以写动态参数化的查询;
 2.PreparedStatement比 Statement 更快;
 3.PreparedStatement可以防止SQL注入式攻击

数据库执行 SQL 语句过程

在数据库执行 SQL 语句过程中,制定执行计划开销巨大。

数据库本身具备 SQL 缓存功能,可以对 statement 的执行计划进行缓存,以免重复分析。其缓存原理是使用 statement 本身作为 key 并将执行计划存入与statement 对应的缓存中,对曾经执行过的 statements,再运行时执行计划将重用。

SELECT a, b FROM t WHERE c = 1;

再次向数据库发送相同的 statement 时,数据库会对先前使用过的执行计划进行重用,降低开销。

但是,如下两条语句被视作不同的 SQL 语句,执行计划不可重用:

SELECT a, b FROM t WHERE c = 1;

SELECT a, b FROM t WHERE c = 2;

这就是为什么要使用 PreparedStatement:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息