2017-08-28 1 views
0

J'ai une application de connexion qui doit se connecter à un serveur pour vérifier le nom d'utilisateur et mot de passe. J'utilise netbeans et le jbdc est installé et fonctionne dans l'onglet services (merci stack overflow!). Par le jbdc est le travail que je veux dire que je peux exécuter le script SQL à travers elle.Connexion MySQL Netbeans - ne pas faire avec jbdc

J'ai mis cette question avec le serveur MS 16 et MySQL, donc je suis convied il est le code:

Méthode de connexion:

package dbUtil; 

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

public class dbConnection { 
    private static final String USERNAME = "root"; 
    private static final String PASSWORD = "mess"; 
    private static final String SQCONN = "jdbc:mysql://localhost:1434/MessyLogin?zeroDateTimeBehavior=convertToNull"; 


    public static Connection getConnection()throws SQLException{ 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      return DriverManager.getConnection(SQCONN, USERNAME, PASSWORD); 
     }catch (ClassNotFoundException e) { 
     } 
     return null; 
    } 
} 

loginmodel:

package LogIn; 


import dbUtil.dbConnection; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 



public class LogInModel { 
    Connection connection; 

    public LogInModel() { 
     try{ 

      this.connection = dbConnection.getConnection(); 

     }catch(SQLException e){ 

     } 

     if(this.connection == null){ 
      System.out.println("here"); 
      // System.exit(1); 
     } 
    } 
    public boolean isDatabaseConnected(){ 
     return this.connection != null; 
    } 

    public boolean isLogin(String username, String password) throws Exception{ 
     PreparedStatement pr = null; 
     ResultSet rs = null; 

     String sql = "SELECT * FROM MessyLogin where username = ? and Password = ?"; 

     try{ 
      pr = this.connection.prepareStatement(sql); 
      pr.setString(1, username); 
      pr.setString(2, password); 

      rs = pr.executeQuery(); 

      boolean bool1; 

      if(rs.next()){ 
       return true; 
      } 
      return false; 
     } 
     catch(SQLException ex){   
      return false; 
     } 

     finally { 
      { 
       pr.close(); 
       rs.close(); 
      } 
     } 
    } 

} 

je crois que le Le problème est le return null; du fichier dbConnection. Le if(this.connection==Null) revient true et le système quitte.

Merci d'avance.

+3

Vous n'avez aucune idée de ce qui se passe lorsque vous écrivez des blocs catch vides. Imprime la trace de la pile. – duffymo

+0

Peut-être devriez-vous instancier (avec new) la classe "dbConnection" dans "LogInModel" avant d'utiliser la méthode "getConnection()". – ziMtyth

+0

Vous pouvez vérifier avec le débogueur pour voir si "dbConnection" est différent de null, donc vous pouvez appeler sa méthode. – ziMtyth

Répondre

1

Votre classe dbConnection est une mauvaise idée. Pourquoi câbler ces valeurs lorsque vous pouvez les transmettre?

Votre application n'aura qu'une seule connexion si vous le codez de cette façon. Une solution plus pratique utilisera un pool de connexion.

En savoir Java coding standards. Votre code ne les suit pas; cela rend la lecture et la compréhension plus difficiles.

est ici quelques recommandations:

package dbUtil; 

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

public class dbConnection { 

    public static final String DRIVER = "com.mysql.jdbc.Driver"; 
    public static final String USERNAME = "root"; 
    public static final String PASSWORD = "mess"; 
    public static final String URL = "jdbc:mysql://localhost:1434/MessyLogin?zeroDateTimeBehavior=convertToNull"; 


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

Je pourrais écrire que LogInModel cette façon:

package LogIn; 


import dbUtil.dbConnection; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class LogInModel { 

    private static final String sql = "SELECT * FROM MessyLogin where username = ? and Password = ?"; 

    private Connection connection; 

    public LogInModel(Connection connection) { 
     this.connection = connection; 
    } 

    public boolean isLogin(String username, String password) { 
     boolean isValidUser = false; 
     PreparedStatement pr = null; 
     ResultSet rs = null; 
     try { 
      pr = this.connection.prepareStatement(sql); 
      pr.setString(1, username); 
      pr.setString(2, password);  
      rs = pr.executeQuery(); 
      while (rs.hasNext()) { 
       isValidUser = true; 
      } 
     } catch (SQLException ex) { 
      e.printStackTrace();  
      isValidUser = false; 
     } finally { 
       dbUtils.close(rs); 
       dbUtils.close(pr); 
     } 
     return isValidUser; 
    }  
} 

Voici ma conjecture pour expliquer pourquoi votre code échoue: Vous n'avez pas le JDBC MySQL pilote JAR dans votre CLASSPATH d'exécution. Une exception est levée quand il ne trouve pas la classe de pilote, mais vous ne le saviez pas parce que vous avez avalé l'exception.

+0

Pour l'instant, je ne suis pas préoccupé par la connexion de cette application. J'ai besoin d'apprendre et d'utiliser les pools de connexion (vous êtes sans doute correct). Voyant que c'est quelque chose que je n'utiliserai jamais, l'apprentissage des pools de connexion ne semblait pas justifié à ce stade. Compte tenu de cette information, croyez-vous que je devrais jeter cela et essayer une autre façon d'obtenir une connexion? –

+0

Vous devriez comprendre ce qui ne va pas avec ce code, mais vous devriez éventuellement utiliser un pool. Je ne connais pas vos besoins. Inquiet de comprendre ce code en premier. – duffymo

+0

J'apprécie vraiment votre contribution, en particulier les normes de codage. Ce sera une ressource précieuse. –