2017-02-03 4 views
-1

Я работаю над проектом WEB, и я хочу включить для регистрации пользователя, поэтому после того, как пользователь напишет его данные (имя пользователя, пароль, псевдоним, ...), я хочу проверить, имя пользователя или псевдоним он вошел уникальны (не существует в таблице пользователей), так и в сервлет я писал:conn.prepareStatement throws the error

try { 

     Context context = new InitialContext(); 
     BasicDataSource ds = (BasicDataSource) context 
       .lookup(getServletContext().getInitParameter(UAppConstants.DB_DATASOURCE) + UAppConstants.OPEN); 
     Connection conn = ds.getConnection(); 

     PreparedStatement stmt; 
     try{ 
      System.out.println("1"); 

      stmt = conn.prepareStatement(UAppConstants.SELECT_USER_BY_NICKNAME_STMT); 

      System.out.println("2"); 

      stmt.setString(1, _nickname); 
      //here some other code 

      }catch (SQLException e) { 
       System.err.println(e.getMessage()); 
      } 
    //here some other code 


} 
catch (SQLException | NamingException e) { 
     getServletContext().log("Error while closing connection", e); 
     response.sendError(500);// internal server error 
    } 

UAppConstant.java:

public final String SELECT_USER_BY_NAME_STMT = "SELECT * FROM USERS " + "WHERE username=?"; 
    public final String SELECT_USER_BY_NICKNAME_STMT = "SELECT * FROM USERS" + "WHERE nickname=?"; 

и в таблице SQL есть имя пользователя, псевдоним.

проблема заключается в том, что она печатает 1 в консоли, но он никогда не печатает 2, вместо этого, он печатает:

Syntax error: Encountered "=" at line 1, column 34. 

Я просмотрел все «=» в сервлет, и все они находятся в правом синтаксис!

Спасибо за хелперов :)

+0

Добавить полный StackTrace пожалуйста – Jens

+0

Попробуйте вставить пробелы вокруг «=» – desperateCoder

+0

, как я могу это сделать? @Jens – user6561572

ответ

1

Вы, наверное, забыли указать номер параметра в подготовке шаблона вашего заявления. Итак, ПодготовленоУтверждение не может определить, какой параметр установить вместо ?. Кроме того, "" отсутствует между ПОЛЬЗОВАТЕЛЕЙ и ГДЕ

Таким образом, вместо того, чтобы:

"SELECT * FROM USERS" + "WHERE nickname=?" 

Вы должны написать:

"SELECT * FROM USERS " + "WHERE nickname=?1" 

И точно так же, вместо того, чтобы:

"SELECT * FROM USERS " + "WHERE username=?" 

You shou л.д. пишут:

"SELECT * FROM USERS " + "WHERE username=?1" 
+0

вам также не хватает пробелов между «пользователями» и «где» в первом выражении (ник) – desperateCoder

+0

Извините, теперь исправлено. –

+0

@utsav_deep спасибо, что это сработало – user6561572