Java中Statement与PreparedStatement与CallableStatement之间的区别 - javarevisited


这三个类的目的是执行不同类型的SQL查询,但是它们之间还有一些细微的差别。现在让我们来看一下它们:

  • 1. SQL查询的类型:

这三个类中每一个的根本区别和独特之处之一是Statements用于执行标准SQL查询,PreparedStatement用于执行绑定或动态查询,CallableStatement用于从Java调用存储过程。
  • 2. SQL查询的频率:

Statement,PreparedSatement和CallableStatement之间的另一个关键区别在于,当一个特定的SQL查询可能仅执行一次时,首选使用首选,而当特定的SQL查询要多次执行但首选使用PreparedStatement时,则首选使用PreparedStatement。具有不同的值,例如 SELECT * From Users其中UserId =?。另一方面,当要执行存储过程时,首选CallableStatement。
  • 3. SQL注入

PreparedStatement,Statement和CallableStatement之间的另一个重要区别是PreparedStatement阻止Java Web应用程序进行SQL注入。这也是在Java Web应用程序中使用PreparedStatement的常见原因之一。 在语句上使用PreparedStatement以获得更好的性能和防止SQL注入也是一种 JDBC最佳实践。 
  • 4.性能

这可能是Java中Statement,PreparedStatement和CallableStatement之间最本质的区别。与PreparedStatement的性能相比,Statement的性能非常低,因为已编译查询,并且计划在数据库端进行了缓存。与Statement相比,CalalbleStatement的性能很高。 
  • 5.用法

Statement主要用于执行CREATE,ALTER和DROP之类的DDL语句,尽管您也可以执行一次性SELECT语句。与此相比,PreparedStatemetn用于应该多次运行但使用不同参数的SQL查询。CalalbleStatement用于调用存储过程和函数。