Statemen和PreparedStatement都可以用于把sql语句从java程序中发送到指定数据库,并执行sql语句。
- 直接使用Statement,驱动程序一般不会对sql语句作处理而直接交给数据库。
- 使用PreparedStament,形成预编译的过程,并且会对语句作字符集的转换。
有两个好处:对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;另外,可以比较好地解决系统的本地化问题。 - PreparedStatement还能有效的防止危险字符的注入,也就是sql注入的问题。
- PreparedStatement不仅包含了SQL语句,而且大多数情况下这个语句已被预编译过,当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会降低运行时间,加快了访问数据库的速度。
好处是,不必重复SQL语句的句法,而只需要改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅是变量的不同。如仅执行一次的话,它和普通的对象无差异,体现不出预编译的优越性。 - Statement不支持占位符,而PreparedStarement支持占位符