2015-07-08 3 views
0

У меня есть код, который успешно устанавливает соединение с базой данных mySQL.Как выполнить простую проверку по электронной почте/паролю в JSP с использованием базы данных SQL?

String email, password; //assume these are already loaded with user-entered data. 

    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
    } catch (ClassNotFoundException e) { 
     return false; 
    } 

    Connection conn = null; 

    try { 
     conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/main", "root", "password123"); 
    } catch (SQLException e) { 
     return false; 
    } 

    //perform my database actions here/////////////// 

    /////////////////////////////////////////////////// 

    try { 
     conn.close(); 
    } catch (SQLException e) { 
     return false; 
    } 

У меня есть несколько строк, в рамках указанного выше кода, который уже есть адрес электронной почты и пароль, введенный пользователем на странице входа. Мне нужно просмотреть базу данных для соответствующего адреса электронной почты, а затем проверить, соответствует ли пароль тому, что пользователь вводил в форму.

В моей таблице 3 столбца: идентификатор, адрес электронной почты и пароль.

Я подтолкнули две строки в таблицу с помощью SQL верстак

1 | [email protected] | пароль1

2 | [email protected] | password2

Я предполагаю, что в чистом SQL я должен сделать что-то вроде

SELECT * FROM users WHERE email LIKE '[email protected]' AND password LIKE 'password1'; 

Но я не совсем уверен, как на самом деле отправить эти SQL команды в базе данных и получать информацию обратно с помощью JSP , Кроме того, я не совсем уверен, что моя логика SQL - идеальный способ проверки пароля. Мое мышление с помощью команды SQL выше заключалось в том, что если база данных находит любую строку, которая соответствует условиям, то комбинация электронной почты и пароля проверяется. Не уверен, что это отличный способ сделать это. Я не ищу самый безопасный и сложный способ, я просто ищу самый простой способ, который имеет смысл на данный момент. Каждый учебник, который я нахожу, по-видимому, делает это по-другому, и я немного смущен.

+0

Зачем использовать LIKE вместо = operator? Существуют примеры использования JDBC в сети [zillion] (http://tutorials.jenkov.com/jdbc/preparedstatement.html). – OldProgrammer

+0

искать в учебнике java mvc в сети. Вы всегда можете сказать, какой из них вы хотели бы использовать, и вы плохо понимаете. –

ответ

0

Вот пример, который вы можете использовать с чем-то я работал на (я предполагаю, что связь «подключ» очевидна):

PreparedStatement st = null; 
    ResultSet rec = null; 

    SprayJobItem item = null; 

    try { 

     st = conn.prepareStatement("select * from sprayjob where headerref=? and jobname=?"); 
     st.setString(1, request.getParameter("joblistref")); 
     st.setString(2, request.getParameter("jobname")); 

     rec = st.executeQuery(); 
     if (rec.next()) { 
      item = new SprayJobItem(rec); 
     } 

    } catch (SQLException ex) { 
     // handle any errors 
     ReportError.errorReport("SQLException: " + ex.getMessage()); 
     ReportError.errorReport("SQLState: " + ex.getSQLState()); 
     ReportError.errorReport("VendorError: " + ex.getErrorCode()); 

    } catch (Exception ex) { 
     ReportError.errorReport("Error: " + ex.getMessage()); 
    } finally { 
     // Always make sure result sets and statements are closed, 
     if (ps != null) { 
     try { 
      ps.close(); 
     } catch (SQLException e) { 
      ; 
     } 
     ps = null; 
    } 
    if (rs != null) { 
     try { 
      rs.close(); 
     } catch (SQLException e) { 
      ; 
     } 
     rs = null; 
    } 
    } 

В вашем случае вместо item = new SprayJobItem(rec); вы бы код который отмечает, что пользователь действителен, когда запись найдена.

+0

Все работает отлично для меня, кроме как после выполнения запроса, я делаю rec.getString («email») и rec.getString («пароль») и ничего не получаю, хотя я много раз проверял, что пользователь (я) типа и что находится в базе данных, действительно соответствуют. Кажется, ничего не получается. – xcdemon05

+0

Вы выполнили 'rec.next()'. Первоначально набор данных не будет указывать на первую запись, даже если есть только одна запись. В противном случае вы можете отправить другой вопрос. – Jaydee