• Statement与PreparedStatement的区别


    Statement与PreparedStatement的区别

     

    PreparedStatement预编译SQL语句,性能好。

    PreparedStatement无序拼接SQL语句,编程更简单.

    PreparedStatement可以防止SQL注入,安全性好。

    Statement由方法createStatement()创建,该对象用于发送简单的静态的SQL语句。

    PreparedStatement由方法preparedStatement()创建,该对象用于发送带有一个
    或多个输入参数的SQL语句。该方法继承了Statement的所有方法。并进行了扩展。
    SQL语句使用“?”作为数据占位符,使用setXxx()方法设置数据。

     setXxx()方法的第一个参数谁要设置参数的序数位置,第二个参数时设置给该参数的值。

    //Statement的用法
    int id=111;
    String sql="selsect * from user where id="+id;
    Statement st=connection.CreateStatement();
    ResultSet rs=st.executeQuery(sql);


    //PreparedStatement的用法
    //PreparedStatement可替换变量(在SQL语句中可以包含?)
    String sql="select * from user where id=?";
    PreparedStatement ps=connection.preparedStatement(sql);//sql在这里进行预编译
    int id =111;
    ps.setInt(1,id);//为sql传入参数
    ResultSet rs=ps.executeQuery();//这里不需要sql,因为上面预编译过

    1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
     
    2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
     
    3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理
     
    4.
    Code Fragment 1:

    String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′";
    stmt.executeUpdate(updateString);

    Code Fragment 2:

    PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
    updateSales.setInt(1, 75);
    updateSales.setString(2, "Colombian");
    updateSales.executeUpdate();

    片断2和片断1的区别在于,后者使用了PreparedStatement对象,而前者是普通的Statement对象。PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
    这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出它预编译的优越性。
     
    5.执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
  • 相关阅读:
    第24课 多线程开发
    第23课 装饰器
    第22课 调用外部程序
    第20课 异常处理
    第19课 习题讲解
    第18课 面向对象
    第17课 调试程序
    第16课 pycharm 使用
    第15课 模块与包
    第14课 再识函数
  • 原文地址:https://www.cnblogs.com/liubin1988/p/8999159.html
Copyright © 2020-2023  润新知