我有一个用户生成的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/

10-12 05:51