web-dev-qa-db-fra.com

java.sql.SQLException: Aucun pilote approprié trouvé pour jdbc: Microsoft: sqlserver

Je reçois cette exception lorsque j'essaie d'exécuter ce programme. C'est l'un des exemples de Microsoft. J'ai ajouté le sqljdbc4.jar au classpath dans netbeans pour la compilation et l'exécution, via les propriétés du projet. J'ai aussi testé que la classe pouvait être trouvée en utilisant une instruction import ci-dessous - aucune erreur lors de la compilation, il faut donc trouver le fichier jar.

Pourrait-il être lié à une dll ou à une dll SQL que le sqldbc4.jar fait référence?

C'est l'exception exacte, et ci-dessous le code exact, à l'exception du mot de passe.

Exception:

run:
Java.sql.SQLException: No suitable driver found for jdbc:Microsoft:sqlserver://localhost:1433;databaseName=HealthCareDatabase
Error Trace in getConnection() : No suitable driver found for jdbc:Microsoft:sqlserver://localhost:1433;databaseName=HealthCareDatabase
Error: No active Connection
    at Java.sql.DriverManager.getConnection(DriverManager.Java:602)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:185)
    at javaapplication1.Connect.getConnection(Connect.Java:35)
    at javaapplication1.Connect.displayDbProperties(Connect.Java:50)
    at javaapplication1.JavaApplication1.main(JavaApplication1.Java:23)
BUILD SUCCESSFUL (total time: 1 second)

Code:

 package javaapplication1;
import com.Microsoft.sqlserver.jdbc.SQLServerDriver;

import Java.*;

public class Connect {

    private Java.sql.Connection con = null;
    private final String url = "jdbc:Microsoft:sqlserver://";
    private final String serverName = "localhost";
    private final String portNumber = "1433";
    private final String databaseName = "HealthCareDatabase";
    private final String userName = "larry";
    private final String password = "xxxxxxx";

    // Constructor
    public Connect() {
    }

    private String getConnectionUrl() {
        return url + serverName + ":" + portNumber + ";databaseName=" + databaseName ;
    }

    private Java.sql.Connection getConnection() {
        try {
            Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");
            con = Java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
            if (con != null) {
                System.out.println("Connection Successful!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Error Trace in getConnection() : " + e.getMessage());
        }
        return con;
    }

    public void displayDbProperties() {
        Java.sql.DatabaseMetaData dm = null;
        Java.sql.ResultSet rs = null;
        try {
            con = this.getConnection();
            if (con != null) {
                dm = con.getMetaData();
                System.out.println("Driver Information");
                System.out.println("\tDriver Name: " + dm.getDriverName());
                System.out.println("\tDriver Version: " + dm.getDriverVersion());
                System.out.println("\nDatabase Information ");
                System.out.println("\tDatabase Name: " + dm.getDatabaseProductName());
                System.out.println("\tDatabase Version: " + dm.getDatabaseProductVersion());
                System.out.println("Avalilable Catalogs ");
                rs = dm.getCatalogs();
                while (rs.next()) {
                    System.out.println("\tcatalog: " + rs.getString(1));
                }
                rs.close();
                rs = null;
                closeConnection();
            } else {
                System.out.println("Error: No active Connection");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        dm = null;
    }

    private void closeConnection() {
        try {
            if (con != null) {
                con.close();
            }
            con = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        Connect myDbTest = new Connect();
        myDbTest.displayDbProperties();
    }

}

43
Larry Watanabe

Votre URL devrait être jdbc:sqlserver://server:port;DatabaseName=dbname 
et le nom de la classe devrait ressembler à com.Microsoft.sqlserver.jdbc.SQLServerDriver 
Utiliser MicrosoftSQL Server JDBC Driver 2.0

61
Piyush Mattoo

Voici un code simple à lire dans la base de données SQL . Les noms de base de données sont "database1" . Le nom de table est "table1" . oubliez pas d'ajouter "sqljdbc4.jar" à votre projet. Téléchargez sqljdbc4.jar

public class NewClass {

    public static void main(String[] args) {

        Connection conn = null;
        String dbName = "database1";
        String serverip="192.168.100.100";
        String serverport="1433";
        String url = "jdbc:sqlserver://"+serverip+"\\SQLEXPRESS:"+serverport+";databaseName="+dbName+"";
        Statement stmt = null;
        ResultSet result = null;
        String driver = "com.Microsoft.sqlserver.jdbc.SQLServerDriver";
        String databaseUserName = "admin";
        String databasePassword = "root";
        try {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url, databaseUserName, databasePassword);
            stmt = conn.createStatement();
            result = null;
            String pa,us;
            result = stmt.executeQuery("select * from table1 ");

            while (result.next()) {
                us=result.getString("uname");
                pa = result.getString("pass");              
                System.out.println(us+"  "+pa);
            }

            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
5
Fathah Rehman P

J'avais la même erreur, mais j'avais une chaîne de connexion appropriée. Mon problème était que le pilote n'était pas utilisé, donc optimisé pour sortir de la guerre compilée.

Assurez-vous d'importer le pilote:

import com.Microsoft.sqlserver.jdbc.SQLServerDriver;

Et puis pour le forcer à être inclus dans la guerre finale, vous pouvez faire quelque chose comme ceci:

Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");

Cette ligne est dans la question initiale. Cela fonctionnera également:

SQLServerDriver driver = new SQLServerDriver();
1
JeffryHouser

Vous pouvez essayer comme ci-dessous avec sqljdbc4-2.0.jar:

 public void getConnection() throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException {
        Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        String url = "jdbc:sqlserver://<SERVER_IP>:<PORT_NO>;databaseName=" + DATABASE_NAME;
        Connection conn = DriverManager.getConnection(url, USERNAME, PASSWORD);
        System.out.println("DB Connection started");
        Statement sta = conn.createStatement();
        String Sql = "select * from TABLE_NAME";
        ResultSet rs = sta.executeQuery(Sql);
        while (rs.next()) {
            System.out.println(rs.getString("COLUMN_NAME"));
        }
    }
0
shivam srivastava