PreparedStatement的执行步骤:
1. 向数据库服务器发送SQL语句,数据库对SQL进行解析和优化(conn.preparedStatement(sql))
2. 向数据库发送绑定的参数和值,并执行SQL(pstmt.setString(), pstmt.executeQuery())
他的优势在于:
1. 数据库仅需解析一次SQL(后面可以循环使用这个pstmt进行数据库操作)
2. 数据库优化器仅需进行一次SQL优化,因为数据库可以缓存执行计划
3. 无需处理SQL转义,更安全
4. 以二进制的方式发送参数和句柄,节省内存,减少网络开销(不知道在JDBC中是不是这样)
另外,可以使用pstmt.addBatch(),pstmt.executeBatch()和pstmt.clearBatch()来提高批量处理时的效率
它的劣势在于:
1. 他是会话级的,当连接断开后,pstmt失效
2. 如果只执行一条SQL,需要进行两次网络传输,无疑会增加网络开销