2016-01-30 5 views
0

Я пытаюсь аутентифицировать пользователя (логин) в java, используя базу данных MySQL. Я хочу иметь возможность сделать это в консоли. Это то, что я до сих пор: Мой главный class-Как использовать базу данных MySQL для аутентификации пользователя?

import java.util.Scanner; 

public class main { 
    public static void main(String args[]){ 
     if (args.length < 2) 
      return; 
     login meth = new login(); 
     Scanner in = new Scanner(System.in); 

     String username; 
     String password; 

     System.out.println(""); 
     System.out.println("Username: "); 
      username = in.next(); 
     System.out.println("2. Account Holder"); 
      password = in.next(); 
     System.out.println(""); 
     meth.loginDetails(username, password); 


     login checker = new login(); 
     boolean rc = checker.loginDetails(args[0], args[1]); 


     System.out.println("The result is: " + Boolean.toString(rc)); 

     in.close(); 
    } 

} 

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

import java.sql.*; 

public class login { 
    public void databaseConnection(){ //swapping index a and index b around 
     try  { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection conn = null; 
      conn = DriverManager.getConnection("jdbc:mysql://localhost/loginTest","root", ""); 
      System.out.println("Database is connected !"); 
      conn.close(); 
     } 
     catch(Exception e){ 
      System.out.println("Do not connect to DB - Error:"+e); 
     } 
    } 


    static final String CONN_URL = "jdbc:mysql://localhost/loginTest"; 
    static final String DB_USER = "root"; 
    static final String DB_PASSWORD = ""; 

    public boolean loginDetails(String accountNumber, String password){ 
     Connection con = null; 
     Statement stmt = null; 
     ResultSet rs = null; 

     boolean passwdOK = false; 

     try { 
      // Establish the connection. 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      con = DriverManager.getConnection(CONN_URL, DB_USER, DB_PASSWORD); 

      // Create and execute an SQL statement 
      String sqlst = "SELECT Password FROM customer " + 
           " WHERE Account Number = '" + accountNumber + "'"; 

      stmt = con.createStatement(); 
      rs = stmt.executeQuery(sqlst); 

      // Check the return data 
      if (rs.next()) { 
       String passwdSaved = rs.getString(1).trim(); 
       if (passwdSaved.equals(password.trim())) 
        passwdOK = true; 
      } 

      rs.close(); 
      stmt.close(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     finally { 
      if (con != null) try { con.close(); } catch(Exception e) {} 
     } 

     return passwdOK; 
    } 
} 

Моя база данных называется Customer, а отдельные столбцы называются номером счета, паролем.

В настоящий момент, когда я запускаю программу, она мгновенно завершается. Без отображения каких-либо строк печати.

Так что мой вопрос: как получить результат true или false, чтобы имя пользователя и пароль совпадали. И если он был ложным, пусть они повторили попытку, и если его истинная нагрузка - это меню переключателей?

+0

Как вы выполняете эту программу? Вы пытались запустить его с помощью отладчика и точки останова в начале программы? В качестве примечания: почему вы храните пароли открытого текста? Вы должны быть хеширующими паролями, никогда не сохраняйте их открытым текстом (даже в прототипе программы, поскольку у них есть привычка не выбрасываться)! –

ответ

1

Прежде всего изменения

boolean rc = checker.loginDetails(args[0], args[1]); 

в

boolean rc = checker.loginDetails(username, password); 

Если вы не используете эту программу с аргументами, то арг [0] и арг [1] выбросит ArrayIndexOutOfBoundException

+0

Спасибо за ответ, я сделал ваши изменения, и по какой-то причине программы все еще заканчивают менует, он начинает – IeuanW

+0

, в какой момент он заканчивается. Дамп журнала будет полезен при дальнейшем анализе. – thedarkpassenger

+0

Как найти лог-дамп – IeuanW

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