我有一个用户生成的带有占位符的SQL语句(如SELECT * FROM films WHERE stars > ? AND length > ?
)和应该插入的值的任意数量的输入。我正在迭代输入以将所有这些插入到PreparedStatement
中,但我不知道编译时PreparedStatement
中有多少占位符以及用户提供了多少输入。
据我了解,假设的方法是在SQLException
上捕获preparedStatement.execute()
,这告诉我“没有为占位符指定的值...”,但它不起作用我有很多原因:
SQLException
可以是任何在生成的查询中搜索?
也不起作用,因为它会在以下语句中失败:SELECT * FROM films WHERE title = 'Who Framed Roger Rabbit?'
那么,有没有办法在执行前检查PreparedStatement
的完整性?
答案 0 :(得分:3)
看一下java.sql.ParameterMetaData
,它应该包含PreparedStatement
的各种信息(包括参数计数)。
PreparedStatement pstmt = ...
ParameterMetaData metadata = pstmt.getParameterMetaData();
int pcount = metadata.getParameterCount();
pcount
将包含参数数量。请注意,pstmt.getParameterMetaData()
将连接到数据库。
因此,在迭代输入和绑定参数时,您可以确保(在运行时)所有参数都已绑定。