2016-07-01 3 views
0

Я новичок в создании приложений и никогда не использую базу данных, но знаю ее основы. Нашел код, чтобы сделать простую страницу входа в Интернет, но возвращаемый результат всегда «Неправильные учетные данные».Не удается подключиться к базе данных MySQL в Java-приложении

Вот код для кнопки «Отправить».

if(jTextField2.getText().length()==0) // Checking for empty field 
    JOptionPane.showMessageDialog(null, "Empty fields detected ! Please fill up all fields"); 
else if(jPasswordField1.getPassword().length==0) // Checking for empty field 
    JOptionPane.showMessageDialog(null, "Empty fields detected ! Please fill up all fields"); 
else{ 
    String user = jTextField2.getText(); // Collecting the input 
    char[] pass = jPasswordField1.getPassword(); // Collecting the input 
    String pwd = String.copyValueOf(pass); // converting from array to string 
    if(validate_login(user,pwd)) 
     JOptionPane.showMessageDialog(null, "Correct Login Credentials");   
    else 
     JOptionPane.showMessageDialog(null, "Incorrect Login Credentials"); 
    } 
} 

и вот код для Validate login-

private boolean validate_login(String username,String password) { 
    try{   
    Class.forName("com.mysql.jdbc.Driver"); // MySQL database connection 
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mmtc_law?zeroDateTimeBehavior=convertToNull [root on Default schema]?" + "user=root&password=");  
    PreparedStatement pst = conn.prepareStatement("Select * from login where username=? and password=?"); 
    pst.setString(1, username); 
    pst.setString(2, password); 
    ResultSet rs = pst.executeQuery();       
    if(rs.next())    
     return true;  
    else 
     return false;    
} 
catch(Exception e){ 
     e.printStackTrace(); 
    return false; 
    } 

это мой PHPMyAdmin PAGE- enter image description here

еще тогда, когда я введите имя пользователя и пароль в качестве "администратора" выход есть Msgstr "Неправильные учетные данные". Пожалуйста, помогите. Спасибо заранее!

+0

Для лучшей помощи раньше, опубликовать [MCVE] или [Short, Self Содержащийся, правильный пример] (http://www.sscce.org/). –

ответ

1

Это явно неправильно:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mmtc_law?zeroDateTimeBehavior=convertToNull [root on Default schema]?" + "user=root&password=");  

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

// Enter the root username and password or some credential that you know you can connect with 
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mmtc_law", "root", "rootPassword"); 

Позволить журнал приложений в базу данных, как корень рожон. Я бы создал нового пользователя и GRANT только учетные данные, необходимые для приложения.

С кодом слишком много. Получив эту работу, я бы рекомендовал рефакторинг. Это всегда плохой знак, когда вы видите код Java Swing, смешанный с кодом базы данных. В этом нет никакого расслоения. Создайте свой уровень доступа к данным как отдельный интерфейс, который можно протестировать и развернуть самостоятельно.

Вы никогда не должны иметь URL-адрес подключения к базе данных и учетные данные в коде. Они должны быть экстернализированы. Вы также не должны создавать соединения. Они должны быть получены из пула соединений.

Обновление: Я просто запустил этот класс локально на своей машине и подключился к экземпляру MySQL. Он будет работать и для вас, если вы дадите ему правильные параметры.

Вот запись pom.xml Maven для соединителя JAR:

<dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>6.0.2</version> 
    </dependency> 

Вот класс:

package database; 

import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

/** 
* Database utilities 
* Created by Michael 
* Creation date 5/3/2016. 
* @link https://stackoverflow.com/questions/36999860/mysql-driver-problems/37000276#comment61553720_37000276 
*/ 
public class DatabaseUtils { 

    public static final String DEFAULT_DRIVER = "com.mysql.cj.jdbc.Driver"; 
    public static final String DEFAULT_URL = "jdbc:mysql://localhost/your-database-here"; 
    public static final String DEFAULT_USERNAME = "root"; 
    public static final String DEFAULT_PASSWORD = "your-root-password-here"; 

    public static void main(String[] args) { 
     Connection connection = null; 
     try { 
      connection = createConnection(DEFAULT_DRIVER, DEFAULT_URL, DEFAULT_USERNAME, DEFAULT_PASSWORD); 
      DatabaseMetaData meta = connection.getMetaData(); 
      System.out.println(String.format("Connected to %s version %s", meta.getDatabaseProductName(), meta.getDatabaseProductVersion())); 
     } catch (ClassNotFoundException | SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      close(connection); 
     } 
    } 

    public static Connection createConnection(String driverClass, String url, String username, String password) throws ClassNotFoundException, SQLException { 
     Class.forName(driverClass); 
     return DriverManager.getConnection(url, username, password); 
    } 

    public static void close(Connection connection) { 
     try { 
      if (connection != null) { 
       connection.close(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Он говорит, что не может идентифицировать корень символа. и ключевое слово password связано с полем пароля в моей таблице, –

+0

Пожалуйста, введите пароль root, чтобы узнать, можно ли установить соединение. – duffymo

+0

Ввод пароля дает эту ошибку. Не удается установить соединение с jdbc: mysql: // localhost: 3306/mmtc_law? ZeroDateTimeBehavior = convertToNull с помощью com.mysql.jdbc.Driver (доступ запрещен для пользователя «root» @ «localhost» (используя пароль: ДА)) –

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