我有一个用户生成的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
的完整性吗?
最佳答案
看一下java.sql.ParameterMetaData
,它应该包含有关PreparedStatement
的各种信息(包括参数计数)。
PreparedStatement pstmt = ...
ParameterMetaData metadata = pstmt.getParameterMetaData();
int pcount = metadata.getParameterCount();
pcount
将包含参数数量。注意,pstmt.getParameterMetaData()
将连接到数据库。因此,在迭代输入和绑定参数时,可以确保(在运行时)所有参数都已绑定。
关于java - 检查PreparedStatement中的所有占位符是否已填充,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36602204/