在JDBC预准备语句中使用变量而不是参数索引
问题内容:
在许多编程语言中,对于预准备的语句,可能会发生以下情况:
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方式进行)。
问候,启
问题答案:
正如kd304在我的帖子的评论中提到的那样,如果您不想将另一个第三方库(如Spring)合并到您的项目中,这是一个非常好的解决方案:Javaworld文章:PreparedStatement的命名参数