java检查PreparedStatement中的所有占位符是否已填充
我有一个用户生成的SQL语句,其中包含占位符(如SELECT * FROM films WHERE stars > ? AND length > ?
)和任意数量的输入,用于插入值。我正在迭代输入以将它们全部插入PreparedStatement
,但我不知道在编译时PreparedStatement
中有多少占位符,也不知道用户提供了多少输入
据我所知,假设的方法是在preparedStatement.execute()
上捕捉SQLException
,这告诉我“没有为占位符指定值…”,但由于很多原因,它对我不起作用:
- 我不知道在编译时将使用哪个数据库,
SQLException
可以是任何东西 - 未填充的占位符应以一种方式处理(尤其是在这种情况下),而断开连接应以另一种方式处理(这确实是一个错误)
另外,在生成的查询中搜索?
也不起作用,因为它将在以下语句中失败:SELECT * FROM films WHERE title = 'Who Framed Roger Rabbit?'
那么,有没有办法在执行之前检查PreparedStatement
的完整性
# 1 楼答案
看看
java.sql.ParameterMetaData
,它应该包含关于PreparedStatement
的各种信息(包括参数计数)pcount
将包含参数的数量。请注意,pstmt.getParameterMetaData()
将连接到数据库因此,在迭代输入和绑定参数时,可以确保(在运行时)所有参数都已绑定