Параметр отчета о рождении в виде предложения WHERE

У меня есть отчет BIRT, в котором я хочу показать определенный объем данных (привет, капитан. Очевидно). Все идет нормально. Теперь данные находятся в базе данных MSSQL, и я подключаюсь к ней с помощью драйвера jdbc, все работает отлично.

Проблема в том, что теперь я хочу передать в этот отчет параметр отчета «запрос». Я знаю, как передавать параметры в отчет следующим образом: Запрос:

SELECT * FROM table WHERE field = ?

Затем вы определяете параметр в параметрах набора данных.

Теперь я хочу сделать следующее:

SELECT * FROM table ?

Где мой параметр содержит что-то вроде

WHERE field1 = 'xyz' AND field2 = 2

Проблема в том, что BIRT автоматически добавляет одну кавычку в начало и в конец каждого строкового параметра, чтобы окончательный запрос выглядел так:

SELECT * FROM table 'WHERE field1 = 'xyz' AND field2 = 2'

Это приводит к тому, что MSSQL не может обработать запрос по очевидным причинам. Как это исправить?

заранее спасибо


person Matschie    schedule 20.01.2012    source источник
comment
Есть ли причина, по которой вы не хотите кодировать свой запрос как SELECT * FROM table WHERE field = ? and field2 = ?? (Можно закодировать свой запрос по желанию с помощью динамического sql, но это сделает ваш код уязвимым для атак с использованием SQL-инъекций - см. xkcd.com/327.)   -  person    schedule 20.01.2012


Ответы (1)


Что касается риска SQL-инъекций, вы можете написать:

this.queryText = 'SELECT * FROM table ' + params['where_clause'].value;

в скрипте набора данных beforeOpen.

Но я настоятельно рекомендую избегать этой конструкции и переписывать запрос в форму, предложенную Марком Баннистером, если вы не уверены на 100%, что ввод безопасен.

person jinowolski    schedule 20.01.2012