2017-01-09 4 views
0

У меня есть следующий запрос, где сам первый аргумент является подзапросПараметризация суб запрос с JDBC PreparedStatement

код Java является:

String query = select * from (?) where ROWNUM < ? 
PreparedStatement statement = conn.preparedStatement(query) 
statement.setString(1, "select * from foo_table") 
statement.setInt(2, 3) 

Когда я запускаю код Java, я получаю исключение , Какие альтернативы мне нужно сделать для первого подзапроса statement.setString(1, "select * from foo_table") параметра?

+4

Вы не можете передать подзапрос в качестве параметра в 'PreparedStatement'. Вам нужно объединить SQL в один String –

+0

_Why_, хотите ли вы передать в подзапрос в качестве параметра? –

+0

Чтобы избежать SQL-инъекции – tintin

ответ

1

Это невозможно, заполнитель параметров может представлять только значения, а не имена объектов (такие как имена таблиц, имена столбцов и т. Д.), Ни подвыборки, ни другие элементы запроса.

Вам нужно будет динамически создать запрос для выполнения с использованием конкатенации строк или других параметров форматирования/шаблонирования строк.

Смежные вопросы