这三个类的目的是执行不同类型的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用于调用存储过程和函数。