Java中Statement与PreparedStatement与CallableStatement之间的区别 - javarevisited 2021-05-26 banq 这三个类的目的是执行不同类型的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用于调用存储过程和函数。