使用jdbc PreparedStatement参数化子查询

使用jdbc PreparedStatement参数化子查询,jdbc,Jdbc,我有下面的查询,其中第一个参数本身是一个子查询 java代码是: String query = select * from (?) where ROWNUM < ? PreparedStatement statement = conn.preparedStatement(query) statement.setString(1, "select * from foo_table") statement.setInt(2, 3) String query=select*from(?)whe

我有下面的查询,其中第一个参数本身是一个子查询

java代码是:

String query = select * from (?) where ROWNUM < ?
PreparedStatement statement = conn.preparedStatement(query)
statement.setString(1, "select * from foo_table")
statement.setInt(2, 3)
String query=select*from(?)where ROWNUM<?
PreparedStatement=conn.PreparedStatement(查询)
语句.setString(1,“从foo_表中选择*)
语句.setInt(2,3)

当我运行java代码时,我得到一个异常。对于第一个子查询
语句。setString(1,“从foo_表中选择*)
一个参数,我有什么选择?

这是不可能的,参数占位符只能表示值,不能表示对象名称(如表名、列名等),也不能表示子选择器或其他查询元素


您需要使用字符串连接或其他字符串格式/模板选项动态创建要执行的查询。

您不能在
PreparedStatement
中将子查询作为参数传递。您需要将SQL连接到一个字符串中为什么要将子查询作为参数传入?为了避免SQL注入,您的意思是这些子查询是由用户编写的吗?这就是问题所在,子查询本身来自外部源,并且是该方法的一个参数