2016-07-01 22 views
0

我是新來的應用程序和從未使用過的數據庫,但知道它的基礎知識。 找到了在互聯網上製作簡單登錄頁面的代碼,但返回的輸出始終爲「不正確的憑證」。無法連接到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"); 
    } 
} 

,這裏是爲驗證碼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頁面級 enter image description here

仍然當我進入以「admin」的用戶名和密碼的輸出「不正確的憑證」。 請幫忙。 在此先感謝!

+0

爲了更好地幫助更快,發佈[MCVE]或[短,自包含,正確示例](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"); 

讓一個應用程序日誌到數據庫的根是自找麻煩。我會創建一個新用戶,並僅授予應用程序所需的憑據。

你的代碼有太多的錯誤。一旦你得到這個工作,我建議重構這個。當您看到Java Swing代碼與數據庫代碼混合在一起時,這總是一個不好的跡象。這種方式沒有分層。將您的數據訪問層編寫爲基於接口的獨立對象,您可以自行測試和部署。

您永遠不應該在代碼中擁有硬連線的數據庫連接URL和憑證。它們應該被外化。你也不應該創建連接。這些應該從連接池中獲得。

更新:我只是在我的機器上本地運行此類並連接到MySQL實例。如果你給它正確的參數,它也適用於你。

下面是連接器JAR Maven的pom.xml的條目:

<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

它說不能識別符號根。並且密碼關鍵字已鏈接到我的表中的密碼字段, –

+0

請輸入root密碼以查看是否可以建立連接。 – duffymo

+0

輸入密碼會導致此錯誤 - 無法建立與jdbc的連接:mysql:// localhost:3306/mmtc_law?zeroDateTimeBehavior = convertToNull using com.mysql.jdbc.Driver(訪問被用戶'root'拒絕@'localhost'(使用密碼:YES)) –

相關問題