zoukankan      html  css  js  c++  java
  • Statement和PreparedStatement

    Statement与PreparedStatement的关系和区别:

    关系:PreparedStatement继承自Statement,都是接口。

    区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高   。

       创建Statement是不需要传参的,而创建PreparedStatement是需要传入sql语句作为参数的。(原因:因为PreparedStatement是预编译的,所以在创建PreparedStatement的时候,将sql语句传入PreparedStatement的构造方法,而这个带有参数的构造方法内部,就是处理预编译的代码,作为预编译。而Statement是没有预编译的,只能在执行的时候,具体传入sql语句。)


    在JDBC应用中,如果你已经是一个稍有水平的开发者,就应该学会熟练使用以PreparedStatement代替Statement,也就是说,在任何时候都尽量滴不要去使用Statement。

    PreparedStatement 接口继承 Statement,PreparedStatement 实例包含已编译的 SQL 语句, 所以其执行速度要快于 Statement 对象。

     Statement为一条Sql语句生成执行计划, 如果要执行两条sql语句 

    select colume from table where colume=1;select colume from table where colume=2; 

    会生成两个执行计划 一千个查询就生成一千个执行计划! 

    PreparedStatement用于使用绑定变量重用执行计划 select colume from table where colume=:x; 

    通过set不同数据只需要生成一次执行计划,可以重用。

    PreparedStatement的使用:

    1 String sql = "select distinct loan_type from loan where bank=?";
    2 PreparedStatement preStatement = conn.prepareStatement(sql);
    3 preStatement.setString(1, "Citibank");
    4 ResultSet result = preStatement.executeQuery();

    Statement的使用:

    1 String sql = "select * from users where username='" + username + "' AND " + "password='" + password + "'";
    2 statement = connection.createStatement();
    3 resultSet = statement.executeQuery(sql);

    使用PreparedStatement的好处:

    1.提高可读性和可维护行

    2.最大程度的提高性能。PreparedStatement的第一次执行消耗是很高的,它的性能体现在后面的重复执行(缓存的作用),例如假设对表中的某一个或某几条数据进行针对查询,JDBC驱动会发送一个网络请求到数据解析和优化这个查询,而执行时会产生另一个网络请求。

    3.防止SQL注入(PS:SQL注入产生的原因很简单,就是访问的用户通过前端对网站可以输入参数的地方进行提交参数,参数里注入了一些恶意参数传入到服务器后端中,服务器后端没有对其进行详细的安全过滤,导致传入的参数直接传到数据库中,执行了数据库的SQL语句,SQL语句是可以查询网站的管理员账号、密码、以及一些其他信息等等的敏感数据,这就是SQL的注入式攻击。

    好久没贴图了,给大伙来一个

  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/wudidamowang666/p/11358318.html
Copyright © 2011-2022 走看看