Параметризованный запрос в подготовленном операторе SQL

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

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

первые значения пары, которые я вводил для аргументов вопросительного знака, - это 1- Account, 2- ACCT, третий не имеет значения. МОЙ ВОПРОС IS---> есть ли способ совместить знак вопроса со строковым значением? знак добавления не работает, я получаю ошибку "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 до идентификатора набора значений учетной записи, справа? Что мне не хватает?

Благодарю!

1 ответ

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

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

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

licensed under cc by-sa 3.0 with attribution.