Где я не прав в этом заявлении SQL? - PullRequest
0 голосов
/ 26 декабря 2011

Я разрабатываю простую форму входа в систему с JSF, Jboss и Oracle.Проблема в том, что у меня есть проблема, когда я делаю этот оператор SQL:

SQL_Statement = "SELECT Passwd from USERS WHERE Username = ?";

PreparedStatement passwordQuery = conn.prepareStatement(SQL_Statement);
passwordQuery.setString(1, userToCheck);

ResultSet result = passwordQuery.executeQuery();
if(result.next()){
    storedPassword = result.getString("Passwd");

Это структура таблицы в Oracle:

CREATE TABLE "USERS"(
      "UserId" Integer NOT NULL,
      "GroupId" Integer,
      "SpecialNumber" Varchar2(60 ),
      "Username" Varchar2(50 ),
      "Passwd" Varchar2(50 ),
      "DateToChangePasswd" Date,
      "Address" Varchar2(60 ),
      "StateRegion" Varchar2(50 ),
      "Country" Varchar2(50 ),
      "AdminStatus" Varchar2(30 ),
      "Telephone" Varchar2(50 ),
      "DateUserAdded" Date,
      "UserExpireDate" Date,
      "DateUserLocked" Char(20 ),
      "City" Varchar2(50 ),
      "EMail" Varchar2(50 ),
      "Comment" Clob
    )

Может быть, оператор SQL недопустим?Можете ли вы указать мне, где проблема?

Ответы [ 4 ]

4 голосов
/ 26 декабря 2011

Я думаю, что эта проблема вызвана двойными кавычками, используемыми для объявления столбцов в таблице.Заключение имен столбцов в двойные кавычки делает их чувствительными к регистру.И ваш запрос выбора автоматически преобразует Passwd в PASSWD.Таким образом, столбец не может быть найден.

Измените запрос создания таблицы на

CREATE TABLE USERS (
  UserId Integer NOT NULL,
  GroupId Integer,
  ...

Таким образом, имена столбцов будут без учета регистра.

См. http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm для получения дополнительной информации.

2 голосов
/ 26 декабря 2011

Идентификатор в кавычках используется, поэтому вы должны использовать двойные с именем поля. Для получения дополнительной информации взгляните на страницу книги Google.

Попробуйте это,

SQL_Statement = "SELECT \"Passwd\" from USERS WHERE \"Username\" = ?";
1 голос
/ 26 декабря 2011

На этой странице: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm вы можете прочитать следующее:

Идентификатор в кавычках начинается и заканчивается двойными кавычками ("). Если вы называете объект схемы, используя идентификатор в кавычках, то вы должны используйте двойные кавычки всякий раз, когда вы ссылаетесь на этот объект.

Следовательно, ваш запрос должен выглядеть следующим образом:

SQL_Statement = "SELECT \"Passwd\" from USERS WHERE \"Username\" = ?";
1 голос
/ 26 декабря 2011

Источник вашей проблемы в том, что вы определили имена столбцов в кавычках ( "Passwd").

Если вы не можете изменить свою таблицу (определить имена столбцов без кавычек), ваш запрос должен быть:

"SELECT \"Passwd\" from USERS WHERE Username = ?"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...