2016-07-01 17 views
0

私はアプリケーションを作成するのが初めてで、データベースは使用しませんでしたが、その基本を知っています。 インターネット上で簡単なログインページを作成するコードを見つけましたが、返される出力は常に「不正な認証情報」です。JavaアプリケーションでMySQLデータベースに接続できません

[送信]ボタンのコードは次のとおりです。

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"); 
    } 
} 

、ここでこれは私が「管理者」としてユーザー名とパスワードを入力したときに enter image description here

PAGE-私のphpmyadminのは、まだ出力されている

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; 
    } 

をlogin-検証するためのコードで"不正な資格情報"。 助けてください。 ありがとうございます!

+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を使用してcom.mysql.jdbc.Driver(ユーザー 'root' @ 'localhost'のアクセスが拒否されましたパスワード:YES)) –

関連する問題