有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

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

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

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