简介
~~~~~~~
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。
(用于执行静态 SQL 语句并返回它所生成结果的对象)
子接口有CallableStatement, PreparedStatement。
CallableStatement 对象用于执行对数据库已存在的存储过程的调用;
PreparedStatement接口继承Statement,其对象用于执行带或不带 IN 参数的预编译 SQL 语句;
·IN参数的值在SQL语句创建时未被指定;
·每个IN参数保留一个问号(“?”)作为占位符;
·每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。
区别
1.效率
~~~~~~~
PreparedStatement对象预编译sql语句方便被重复调用。语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
~~~~~~~
而Statement每操作一次就需要重新编译sql语句并执行。
2.可读性和可维护性
~~~~~~~
PreparedStatement将参数与SQL语句分离出来,这样就可以方便对程序的更改和延续,同时可以减少不必要的错误,也看起来没有特别繁琐,增加了可读性。
~~~~~~~
而Statement每操作一次就需要重写sql语句,增加了成本以及出错的可能,读起来也会比较费劲。
3.安全性
~~~~~~~
PreparedStatement使用预编译语句,可以防止sql注入.而如果使用Statement,要对drop等做费尽心机的判断和过滤。