Ошибка вставки в базу данных из Java - PullRequest
0 голосов
/ 10 марта 2012

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

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID), SELECT "+IntImageID+", PropID FROM Props WHERE PropDescription = '"+StrPropDescription+"';";

Error

Вы можете увидеть в ошибке, появляется дополнительный 'После того, где он говорит монитор артериального давления.Я понятия не имею, откуда взялась эта дополнительная информация.Я получаю StrPropDescription из JComboBox.

StrPropDescription = propChoice.getSelectedItem().toString();

Ответы [ 5 ]

4 голосов
/ 10 марта 2012

Я думаю, у вас просто лишняя запятая. Попробуйте

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID) SELECT "+IntImageID+", PropID FROM Props WHERE PropDescription = '"+StrPropDescription+"';";

Обратите внимание на отсутствие запятой между INSERT и SELECT.

4 голосов
/ 10 марта 2012

Во-первых, генерация SQL-операторов непосредственно из пользовательского ввода - опасная вещь!

Во-вторых, вам может потребоваться выгрузить значение StrPropDescription прямо перед оператором sql, чтобы убедиться, что оно имеет значение, которое, по вашему мнению, должно.

Скорее всего, в конце будет апостроф. Затем нужно проследить назад от источника, чтобы увидеть, где / как эта переменная была изменена.

1 голос
/ 10 марта 2012

Я думаю, что проблема с этим утверждением состоит в том, что в вашем выражении sql есть SELECT 1, когда это не имя столбца в вашей таблице, а также , между операторами INSERT и SELECT как уже упоминали другие люди.

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

1: Вы пытаетесь получить ImageID из таблицы, которая является столбцом, и в этом случае вам понадобится что-то вроде:

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID)
             SELECT ImageID, PropID FROM Props 
             WHERE PropDescription = '"+StrPropDescription+"'";

OR

2: вы пытаетесь указать IntImageID в качестве первого значения вставки, а второе значение извлекается из базы данных, и в этом случае это будет выглядеть примерно так:

PropInsert = "INSERT INTO Image_has_Props (Image_ImageID, Props_PropID)
             ("+IntImageID+", SELECT ImageID, PropID FROM Props 
             WHERE PropDescription = '"+StrPropDescription+"')";

Я не совсем уверен, правильно ли я написал вторую, поскольку не могу ее протестировать, но, по сути, она подразумевает, что ваша переменная IntImageID отделена от вашей инструкции SELECT, если ее нет в таблице базы данных. *

1 голос
/ 10 марта 2012

A) Это не допустимый SQL. У вас есть , после (Image_ImageID, Props_PropID) - вы также не заканчиваете оператор ; при использовании JDBC.

B) Вы должны использовать подготовленные операторы с заполнителями, а не вводить необработанный пользовательский ввод в ваш SQL-оператор.

1 голос
/ 10 марта 2012

Дополнительный 'в конце - это просто кавычка вокруг всего синтаксиса выбора, совпадающая с той, что перед SELECT. Я думаю, что есть ошибка после SELECT, SELECT 1, PropID "Является ли 1 имя столбца?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...