2012-03-09 3 views
-1

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

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(); 
+0

Присмотритесь к 'StrPropDescription'.Заканчивается ли оно '' '? –

+1

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

+0

@MattGibson Хорошее место! Просто означает, что сейчас что-то не так! Спасибо хоть! – Peddler

ответ

4

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

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

Обратите внимание на отсутствие запятой между вкладышем . и ВЫБРАТЬ

4

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

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

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

+0

Пользователь фактически выбирает значение для ввода из JComboBox, поэтому он не слишком опасен! Проверено, что печаталось, и это правильно, без апострофа в конце, – Peddler

+0

По-прежнему стоит санировать ваш вход, для этого будущего случая, который всегда появляется там, где у вас есть «Монитор артериального давления корпорации O'Malley» в списке :) –

+0

@MattGibson Не могу спорить с этим, таким образом, просто подходит, как мне нужно это делать в данный момент! – Peddler

1

«Дополнительно» в конце - это всего лишь цитата вокруг всего синтаксиса выбора, соответствующая одному перед SELECT. Я думаю, что есть ошибка после SELECT, ВЫБОР 1, PropID»Является ли 1 имя столбца?

1

а) Это не действует SQL у вас есть , следующие (Image_ImageID, Props_PropID) -.. Кроме того, не до конца заявления с ; при использовании JDBC

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

+0

Пользователи выбирают значение из JComboBox, который отображает список значений из другого столбца, без ввода исходного кода здесь. См. Сообщения ниже и последнюю строку моего первоначального вопроса. – Peddler

+1

Похоже, это отличная причина игнорировать передовую практику;) Честно говоря, нет причин не использовать их. –

+0

Downvoter, прокомментировать? Или я снова заставляю кого-то из интернет-сумасшедших? –

1

Я думаю, что проблема с этим утверждением является то, что у вас есть в вашем 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+"'"; 

ИЛИ

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

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

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

Смежные вопросы