使用变量而不是与JDBC准备语句中的参数指标(Using a variable instead of

2019-06-25 09:46发布

在许多编程语言这样的事情是可能的准备语句:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ${name}");
statement.setString("name", "IBM");

但不能与java.sql.PreparedStatement中。 在Java中一个必须使用的参数指标:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ?");
statement.setString(1, "IBM");

有没有在第一个例子中使用字符串变量的工作像一个解决方案吗? 是“$ {*}”不能用在其他地方的SQL语言,还是有什么冲突? 原因然后我会自己实现它(解析SQL字符串,并以“?”代替所有的变量,然后做Java的方式)。

问候,启

Answer 1:

标准的JDBC的PreparedStatement不具备这种能力。 春天JDBC提供了通过此功能NamedParameterJdbcTemplate



Answer 2:

正如我的帖子的评论中提及kd304,这是一个非常好的解决方案,如果你不希望合并其他第三方库(如Spring)到项目: JavaWorld的文章:PreparedStatement的命名参数



Answer 3:

使用PreparedStatement的原料,这是不可能的,就像你说的。 这是可能的CallableStatement的,但是这需要一个存储过程,而不是仅仅一个SQL语句。

ORM层像Hibernate也提供了命名参数替换,Hibernate也允许您执行本地SQL,绕过OR映射功能完全。

所以,如果你真的热衷于使用命名参数,你可以使用Hibernate作为这样的一种方式; 你只使用其功能的一小部分。



文章来源: Using a variable instead of a parameter index with a JDBC prepared statement
标签: java jdbc