2016-12-01 7 views
1

Я пытаюсь запросить базу данных Firebird из приложения Java. Этот запрос содержит 2 целых переменных и 1 строку. Запрос выглядит следующим образом:Как добавить строковую переменную в SQL-запрос на подключение jdbc firebird

Statement statement = conn.createStatement(); 

ResultSet rs = statement.executeQuery("select * from table where 
    column1 < " + intvariable1 + " and ( 
    column2 > " + intvariable2 +" or column2 = 0) and 
    column3 = '" + stringvariable + "' "; 

Rs.next(); 
syso(rs.getInt(1)); 

Оказывается, что ResultSet пуст, но когда я использую жёстко прописанное значение строки вместо переменного я получаю ожидаемый результат.

Я также пробовал это с preparedstatements с тем же результатом - он работает только без строковой переменной.

Любые идеи, что я делаю неправильно?

EDIT: проблема решена! Stringvariable появился из поля BLOB и имел в нем несколько пустых значений. Вызов функции trim удалил их.

+0

кажется, вопрос с данными прошедших через переменные – developer

+1

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

+0

Пожалуйста, покажите используемые значения и данные в таблице, которую вы ожидаете вернуть. И, пожалуйста, используйте подготовленный оператор (и используйте его правильно!), Не объединяйте значения в строку запроса. –

ответ

0

Я заметил, что в строке «column3» у вас есть пробел после открытия цитаты и перед закрывающей цитатой. Если вы не намеренно пытаетесь сопоставить строки, которые начинаются и заканчиваются пробелом, вы не найдете результатов. Если нет, вырезать пространства:

column3 = '" + stringvariable + "' "; 
+0

Это было специально, потому что, когда я писал это на своем телефоне, кажется, что это довольно сложно увидеть разницу между «и». Угадайте, в конце концов, это было еще больше пропуском таким образом. –