一般大家都会认为PreparedStatement执行SQL的效率会比Statement的高,其实这个不完全正确的。
其实事实是这样的,创建一个PreparedStatement对象到返回ResultSet对象,比创建一个Statement对象到返ResultSet对象的效率要低。原因就在于DBMS服务器的收PreparedStatement对象发送来的SQL时,要预编译处理。而DBMS在收到Statement对象发送来的SQL时,直接编译SQL。预编译比直接编译的开销要大,而预编译的好处是这条SQL可以改变参数执行多次查询。所以单独执行一条SQL时,PreparedStatement会比Statement的效率低。
那么为什么说PreparedStatement比Statement的效率高呢,在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。
其实,还有一个要注要意的细节,如果将连接的自动提交模式设为true,用PreparedStatement来处理一条有可变参数的SQL时,你每次改变了参数后,DBMS还会做预编译处理,与Statement处理的情形一样,所以不能达到提高效率的要求。所以要想用PreparedStatement来提高应用的效率,要满足两个条:1.这条SQL存在可变参数;2.连接的自动提交模式设为false。