Java - подготовленное заявление - PullRequest
2 голосов
/ 13 февраля 2011
ResultSet rs;

PreparedStatement st = MyConnection.prepareStatement("Select * from logindetails where Username = ? and Password = ?");

st.setString(1, username);
st.setString(2, password);

while (rs.next() )
{
    //login correct = true, redirect
}

rs.close();
MyConnection.close();

Проблема в том, что я не могу использовать next () в цикле while с помощью PreparedStatement, потому что я хочу искать в базе данных параметры, введенные пользователем.

Как я могу это исправить?

Ответы [ 3 ]

5 голосов
/ 13 февраля 2011

Вам не нужно while (rs.next()), потому что ваш PreparedStatement уже запросил набор результатов, используя заданные вами имя пользователя и пароль.Вместо этого используйте оператор if для проверки результирующего набора: -

// returns AuthenticatedUser object if authentication is successful, otherwise null
public AuthenticatedUser authenticate(String username, String password) {   
    PreparedStatement st = ...;
    st.setString(1, username);
    st.setString(2, password);

    ResultSet rs = st.executeQuery();

    AuthenticatedUser user = null;

    //login valid because there is something from the result set, then create user object
    if (rs.next() ) {
        // set all the useful user information in this POJO
        user = new AuthenticatedUser(username, rs.getString("name"), rs.getString("whatever_important_info"));
    }

    ... // close resultset, preparedStatement, connection, clean up, etc.

    return user;  
}

С вашего сервера / контроллера вы можете сделать что-то подобное для обработки перенаправления страницы: -

// call the method above to get the user object based on the provided username and password
AuthenticatedUser user = dao.authenticate(username, password);

// successful authentication
if (user != null) {
   // set user object in session so that you don't need to query the database for user info again and again
   session.setAttribute("user", user); 

   // redirect to welcome page
   request.getRequestDispatcher("/your-welcome-page").forward(request, response);
}
else {
   // redirect to login page if authentication fails
   request.getRequestDispatcher("/login-page").forward(request, response);
}
2 голосов
/ 13 февраля 2011

Не уверен, что я правильно понимаю ваш вопрос, но, полагаю, вы хотите перебрать набор результатов и получить доступ к данным столбца ...

rs = st.executeQuery();

while (rs.next() ) {
       rs.getString("columnname");
}
0 голосов
/ 13 февраля 2011

Если это для производственного приложения (в отличие от обучения или домашней работы), почему вы не используете слой абстракции, такой как iBatis, чтобы изолировать вас от этой биопластины?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...