2016-08-13 5 views
-1

У меня есть сообщение об ошибкеSQL-запрос с пользовательским вводом

java.sql.SQLException: ORA-00933: SQL команда не правильно закончилась

, когда я пытаюсь выполнить следующую инструкцию SQL.

В этом заявлении предполагается отобразить все данные о аренде и обратную связь для конкретного клиента при поиске имени клиента. «запрос» относится к пользовательскому вводу, когда пользователь выполняет поиск имени (CustomerName) в базе данных.

SELECT c.CustomerName, r.Rental_ID, r.Staff_ID, r.RentalDate, r.DueDate, 
r.Customer_ID, f.Description 
FROM Rental r, Customer c, FeedBack f 
WHERE f.Customer_ID = r.Customer_ID 
AND c.Customer_ID = f.Customer_ID 
ORDER BY DueDate 
WHERE CustomerName like "+ query +"; 

Что пошло не так?

+1

я надеюсь, что вы буквально не прилагая при условии имени пользователя в запрос и вместо того, чтобы с помощью 'PreparedStatements' таким образом, чтобы избежать вопиющей инъекции SQL уязвимости. – jtahlborn

+0

@ E. На вашем ORDER BY должно появиться после того, как предложение изменит эти места и проверит .. –

+0

Хм, да, у меня есть подготовленное заявление, просто не включенное в мой вопрос. Ха-ха. xD А, я вижу, сделаю это и попробую. Благодарю. :) –

ответ

2

Потому что у вас есть WHERE и ORDER BY статьи в неторопливых местах; не только то, что у вас на самом деле есть два предложения WHERE в вашем запросе. Это должно быть только одно. WHERE должен наступить первым, а затем order by. Это скорее должно быть

WHERE CustomerName like "+ query +" 
ORDER BY DueDate; 

Также как примечание стороны,

  1. Рассмотрим с помощью параметризованных запросов
  2. Изменить запрос, чтобы использовать стандартный синтаксис JOIN вместо старого синтаксиса в стиле ANSI.

Ваш запрос должен выглядеть

SELECT c.CustomerName, r.Rental_ID, 
r.Staff_ID, r.RentalDate, 
r.DueDate, r.Customer_ID, f.Description 
FROM Rental r 
JOIN FeedBack f ON f.Customer_ID = r.Customer_ID 
JOIN Customer c ON c.Customer_ID = f.Customer_ID 
WHERE c.CustomerName like "+ query +" 
ORDER BY r.DueDate; 
+0

А, я вижу. Мой преподаватель научил меня синтаксис старого стиля, поэтому я использовал это, но спасибо за объяснение. :) –