将变量而不是参数索引与 JDBC 预准备语句结合使用

2022-09-01 06:03:56

在许多编程语言中,预准备语句可以采用这样的方法:

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方式执行此操作)。

问候, 凯


答案 1

标准 JDBC 预报没有此功能。Spring JDBC 通过 NamedParameterJdbcTemplate 提供了此功能。


答案 2

正如kd304在我帖子的评论中提到的,如果你不想将另一个第三方库(如Spring)合并到你的项目中,这是一个非常好的解决方案:Javaworld文章:ReadyStatement的命名参数


推荐