检查PreparedStatement中的所有占位符是否已填充

时间:2016-04-13 14:54:00

标签: java sql jdbc

我有一个用户生成的带有占位符的SQL语句(如SELECT * FROM films WHERE stars > ? AND length > ?)和应该插入的值的任意数量的输入。我正在迭代输入以将所有这些插入到PreparedStatement中,但我不知道编译时PreparedStatement中有多少占位符以及用户提供了多少输入。

据我了解,假设的方法是在SQLException上捕获preparedStatement.execute(),这告诉我“没有为占位符指定的值...”,但它不起作用我有很多原因:

  • 我不知道在编译时会使用哪个DB,SQLException可以是任何
  • 未填充的占位符应该以一种方式处理(特别是这是好的情况)并以另一种方式丢失连接(这确实是错误)

在生成的查询中搜索?也不起作用,因为它会在以下语句中失败:SELECT * FROM films WHERE title = 'Who Framed Roger Rabbit?'

那么,有没有办法在执行前检查PreparedStatement的完整性?

1 个答案:

答案 0 :(得分:3)

看一下java.sql.ParameterMetaData,它应该包含PreparedStatement的各种信息(包括参数计数)。

PreparedStatement pstmt = ...
ParameterMetaData metadata = pstmt.getParameterMetaData();
int pcount = metadata.getParameterCount();

pcount将包含参数数量。请注意,pstmt.getParameterMetaData() 将连接到数据库

因此,在迭代输入和绑定参数时,您可以确保(在运行时)所有参数都已绑定。