在查询中插入常量的绑定参数?

时间:2018-10-12 18:15:25

标签: mysql oracle prepared-statement jdbctemplate

在Prepared Statement中使用绑定参数(使用?)是一种流行的策略,用于在运行时在SQL查询中插入参数。我的问题是,是否应使用此策略将常量插入查询中?我说的是与用户以任何方式输入的数据都不相关的常量。有什么原因为什么我不应该直接在SQL查询中使用这些常量,而应该使用预处理语句呢?

通过代码显示我在说什么:

public static final String x = "xxx";

getJdbcTemplate.update("SELECT * FROM TABLE WHERE COLUMN = ?", x);

vs

getJdbcTemplate.update("SELECT * FROM TABLE WHERE COLUMN = '" + x + "'");

1 个答案:

答案 0 :(得分:0)

当您编写这样的查询时,

update("SELECT * FROM TABLE WHERE COLUMN = " + x,);

代替这个

update("SELECT * FROM TABLE WHERE COLUMN = ?", x);

第一个查询不会从查询的预编译中受益。

当您使用时?在查询中,并说生产中的查询运行了数百到数千到一百万次,预编译的查询(包含?的查询)将被重复使用一次又一次,从而避免了重新编译查询,这种现象使查询变得更好了。性能上要比包含硬编码数据的查询要好。

由于查询中包含硬编码数据,因此每次查询都不同,因为硬编码数据每次随查询变化很大,因此每次都要对查询进行编译,从而影响性能。

但是,如果您只需要运行几次查询,则不会获得任何显着的性能提升。