2012-02-11 2 views
0

Я пытаюсь запросить данные из своего приложения, используя postgresql DB. То, что я хочу достичь, - из «Пользователи», где «Username» = 'stackoverflow'Невозможно правильно выполнить sql-запрос из java

Если этот запрос написан в редакторе SQl и запущен, он дает ожидаемый результат.

Таким образом, я пытаюсь отправить запрос в том же формате, как и

String SQL_QUERY = "from " + "\"Users\"" + " where " + "Username" + "=" + "'" + request.getParameter("username") + "'";

Когда я запускаю это, я получаю следующее сообщение об ошибке: неожиданный символ: «"»[от" Пользователи "где Имя пользователя = user1]

Если удалить двойные кавычки, это не будет работать, говоря таблица с именем пользователя не существует. Какой выход из этого тупика? где я буду неправильно ??

спасибо.

+0

Его не обязательно. Он может быть обрамлен без выбора * –

ответ

0

После синтаксиса Postgresql был в конце концов помог в получении решения. Изменили все имена столбцов в небольших столицах, а затем попытались, что решило большинство проблем. Благодаря A.H

 String SQL_QUERY = "FROM Users WHERE username ='" + username + "'"; 
     Query query = objSession.createQuery(SQL_QUERY); 

     List list = query.list(); 
     for (Iterator it = list.iterator(); it.hasNext();) { 
      Users objUsers = (Users) it.next(); 
      System.out.println("Username: " + objUsers.userName); 
      System.out.println("Password: " + objUsers.password); 
      System.out.println("Name: " + objUsers.name); 
     } 
0

Где находится статья SELECT запроса? Это должно быть что-то вроде этого:

String SQL_QUERY= "SELECT * FROM Users WHERE Username='" + request.getParameter("username") + "'";

Или так:

String SQL_QUERY= "SELECT FirstName, LastName, Email FROM Users WHERE Username='" + request.getParameter("username") + "'";

Вот очень похожий пример, который использует PreparedStatement, чтобы избежать атаки безопасности инъекции SQL: https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java

+0

Даже указание всех столбцов, а не *, не помогает. –

+0

Ошибка, с которой я сталкиваюсь, когда я создаю wuery, как и предложил. :: SEVERE: ERROR: отношение «пользователи» не существует Позиция: 126 не удалось выполнить запрос –

+0

Если я даю двойные кавычки «Пользователям», тогда я получаю сообщение об ошибке :: неожиданный char: '"' [from" Users " где Username = 'user1']. Не путайте, как продолжить выполнение этого запроса. –

1

Это должно быть то, что вы хотите:

String username = request.getParameter("username"); 
String SQL_QUERY = "SELECT * FROM \"Users\" WHERE \"Username\" ='" + username + "'"; 

Вы можете проверить это

System.out.println(SQL_QUERY); 

, который печатает

SELECT * FROM "Users" WHERE "Username" ='foo' 

ВНИМАНИЕ/ОПАСНОСТЬ: Это заявление будет решить вашу проблему с PostgreSQL смешанного случая имя_таблицы и columnnames. BUT, обеспечивающий значение для Username для запроса таким образом, делает вас уязвимым даже для самой легкой атаки SQL-Injection. Пожалуйста, используйте вместо PreparedStatement и писать

String SQL_QUERY = "SELECT * FROM \"Users\" WHERE \"Username\" = ?"; 
+0

Ошибка: SQL_QUERY -> SELECT * FROM «Пользователи» ГДЕ «Имя пользователя» = 'user1' 12 февраля 2012 г. 2:11:46 org.hibernate.hql.ast.ErrorCounter reportError SEVERE: *** ОШИБКА: строка 1: 8: неожиданный токен: * неожиданный символ: '' '[SELECT * FROM «Пользователи» ГДЕ «Имя пользователя» =' user1 '] –

+0

Withough select *, error: SQL_QUERY -> FROM «Пользователи» WHERE «Username» = 'user1' неожиданный символ: '' '[FROM «Пользователи» ГДЕ «Имя пользователя» =' user1 '] –

+0

Часть 'hibernate' говорит мне, что вы не используете SQL. Это также объясняет недостающую часть 'SELECT ...'. Правильно? –

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