2013-06-25 3 views
1

У меня есть Java-программа, которая подключается к базе данных, и я пытаюсь что-то обновить в базе данных с помощью подготовленных операторов и параметризованных запросов. Вот часть моего кода:параметризованный запрос в подготовленном SQL-заявлении

updateValSetId = con.prepareStatement("UPDATE COLUMNNAME " + 
      "SET COLUMNDISPLAYNAME = ? + ' Value Set Identifier' " + 
      "WHERE COLUMNDISPLAYNAME = ? + 'VALSETID' and TABLENAME = ?"); 

первые пару значений я ставлю в для аргументов знаком вопроса являются 1- счета, 2- АККТ, третий не имеет значения. МОЙ ВОПРОС --- --- есть ли способ совместить знак вопроса с строковым значением? знак дополнения не работает, я получаю ошибку «ORA = 01722: недопустимый номер»

после того, как я посмотрел, что означает, что ошибки я изменил код, чтобы что-то вроде этого:

updateValSetId = con.prepareStatement("UPDATE COLUMNNAME " + 
      "SET COLUMNDISPLAYNAME = '? Value Set Identifier' " + 
      "WHERE COLUMNDISPLAYNAME = '?VALSETID' and TABLENAME = ?"); 

что Ждет» т. Итак, есть ли способ совместить вопросительные знаки со строками?

Спасибо!

EDIT ----------> Я решил вынуть текст строки после? и положите его в другое место:

updateValSetId.setString(1, f.getValue() + " Value Set Identifier"); 
       updateValSetId.setString(2, f.getKey() + "VALSETID"); 
       updateValSetId.setString(3, e.getKey()); 
       updateValSetId.executeUpdate(); 

Это после моих подготовленных заявлений, когда я присваиваю значения значению? параметр. «f» и «e» - это hashmaps, в которых хранятся данные, и мне интересно, почему приведенный выше код не работает, когда я добавляю строку к значению, которое я получаю от getValue и getKey. Я не получаю никаких ошибок, он компилируется и запускается, но он не обновляет значения, которые я хочу в базе данных. Например, ACCT является первым ключом, а Account является первым значением, поэтому, когда они передаются, они должны быть добавлены к строке, которая у меня есть после геттеров, и поэтому база данных должна обновлять ACCTVALSETID до идентификатора набора значений учетной записи, справа ? Что мне не хватает?

Спасибо!

+0

Если код работает и вы не видите изменения в своей БД, возможно, может быть выбрано SQLException или нет? Проверь это. – JosephChilberry

ответ

0

Редактирование Я сделал это на самом деле правильно, у меня были ошибки в других частях моего кода, следующий код работает:

updateValSetId.setString(1, f.getValue() + " Value Set Identifier"); 
      updateValSetId.setString(2, f.getKey() + "VALSETID"); 
      updateValSetId.setString(3, e.getKey()); 
      updateValSetId.executeUpdate(); 

Так что я думаю, вы не можете добавить строковые значения в? параметр, но это работает точно так же, как если бы вы добавляли его в?