MySQL умножить строку на переменную - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь умножить строку на переменную (рассчитанное количество):

double servingsMultiplier = 1;
double servingSizeMultiplier = 1;

Вычислить значения для "servingsMultiplier" и "serveSizeMultiplier".

  String selectQry5 = ("SELECT ci_id, cr_id, ci_ingedient, (ci_amount*servingsMultiplier) AS ci_amount, " + 
                " (ci_unit*servingSizeMultiplier) AS ci_unit " +
            " FROM at_cat_ingredient " + 
            " WHERE cr_id = ? " +
            " ORDER BY ci_ingedient;");

Выше работает, когда я использую константу (например, 2); однако не тогда, когда я использую переменную. Я получаю сообщение об ошибке:

«SQLException в recipePDF: com. mysql .jdb c .exceptions.jdbc4.MySQLSyntaxErrorException: Неизвестный столбец« servingsMultiplier »в« списке полей ».

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Идентификатор типа servingsMultiplier внутри оператора sql распознается не как значение переменной, а как имя столбца, которого, конечно, не существует. Используйте заполнители ? для servingsMultiplier и servingSizeMultiplier в инструкции и передавайте их значения так же, как вы передаете параметр в предложении WHERE:

String selectQry5 = 
    "SELECT ci_id, cr_id, ci_ingedient, " + 
    "(ci_amount * ?) AS ci_amount, " + 
    "(ci_unit * ?) AS ci_unit " +
    "FROM at_cat_ingredient " + 
    "WHERE cr_id = ? " +
    "ORDER BY ci_ingedient;";
1 голос
/ 18 июня 2020

Если вы хотите использовать mysql переменные, добавьте @ перед именем переменной.

SELECT ci_id, cr_id, ci_ingedient, (ci_amount*@servingsMultiplier) AS ci_amount,
(ci_unit*@servingSizeMultiplier) AS ci_unit
FROM at_cat_ingredient 
WHERE cr_id = @id
ORDER BY ci_ingedient;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...