prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,屡次使用可提升效率。
sql
createStatement不会初始化,没有预处理,每次都是从0开始执行SQL。数据库
prepareStatement能够在SQL中用?替换变量xss
代码以下:函数
int sid=1001; ps=conn.prepareStatement("select * from Cust where ID=?"); int s=1001; ps.setInt(1, s); rs = ps.executeQuery();
createStatement不支持?替换变量,只能在sql中拼接参数性能
int sid=1001; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);
Statement ─ 由方法 createStatement 所建立。Statement 对象用于发送简单的 SQL 语句。spa
PreparedStatement ─ 由方法 prepareStatement 所建立。PreparedStatement 对象用于发送带有一个或多个输入参数( IN 参数)的 SQL 语句。PreparedStatement 拥有一组方法,用于设置 IN 参数的值。执行语句时,这些 IN 参数将被送到数据库中。PreparedStatement 的实例扩展了 Statement ,所以它们都包括了 Statement 的方法。PreparedStatement 对象有可能比 Statement 对象的效率更高,由于它已被预编译过并存放在那以供未来使用。code
CallableStatement ─ 由方法 prepareCall 所建立。CallableStatement 对象用于执行 SQL 储存程序 ─ 一组可经过名称来调用(就象函数的调用那样)的 SQL 语句。CallableStatement 对象从 PreparedStatement 中继承了用于处理 IN 参数的方法,并且还增长了用于处理 OUT 参数和 INOUT 参数的方法。orm
如下所列提供的方法能够快速决定应用哪一个Connection方法来建立不一样类型的SQL 语句:
createStatement 方法用于: 简单的SQL语句(不带参数) 对象
prepareStatement 方法用于:带一个或多个IN参数的SQL语句,常常被执行的简单SQL语句 继承
prepareCall 方法用于: 调用已储存过程
我的认为,不管从代码的可读性和可维护性,仍是从提升性能方面,或者说避免xss攻击方面,都应该使用prepareStatement。