1、Statement、prepareStatement和callableStatement 都是接口。
2、Statement继承Wrapper、PrepareStatement继承Statement、CallableStatement继承PrepareStatement。
3、Statement接口提供了执行语句和获取结果的基本方法。
PrepareStatement接口添加了处理In参数的方法
CallableStatement接口添加了处理Out参数的方法
4、
Statement:
普通的不带参数的查询sql,支持批量更新,批量删除
PrepareStatement:
可变参数的SQL,编译一次执行多次,效率高,
安全性好,有效防止Sql注入等问题
支持批量更新、批量删除
CallableStatement:
继承自PrepareStatement,支持带参数的SQL操作
支持调用存储过程,提供了对输出和输入参数(IN\OUT)的支持
5、Statement每次支持sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PrepareStatement。
PrepareStatement是预编译的,使用PrepareStatement有几个好处:
①在执行可变参数的一条sql时,PerpareStatement比Statement的效率高,因为DBMS预编译一条sql当然会比多次编译一条sql的效率高。
②安全性好,有效防止sql注入。
③对于多次重复执行的语句,使用PrepareStatement效率会高一点,并且在这种情况下也比较适合使用batch
④代码的可读性和可维护性