java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver

284,065

Solution 1

Your URL should be jdbc:sqlserver://server:port;DatabaseName=dbname
and Class name should be like com.microsoft.sqlserver.jdbc.SQLServerDriver
Use MicrosoftSQL Server JDBC Driver 2.0

Solution 2

For someone looking to solve same by using maven. Add below dependency in POM:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>7.0.0.jre8</version>
</dependency>

And use below code for connection:

String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=master;user=sa;password=your_password";

try {
    System.out.print("Connecting to SQL Server ... ");
    try (Connection connection = DriverManager.getConnection(connectionUrl))        {
        System.out.println("Done.");
    }
} catch (Exception e) {
    System.out.println();
    e.printStackTrace();
}

Look for this link for other CRUD type of queries.

Solution 3

Following is a simple code to read from SQL database. Database names is "database1". Table name is "table1". It contain two columns "uname" and "pass". Dont forget to add "sqljdbc4.jar" to your project. Download 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();
        }
    }
}

Solution 4

I was having the same error, but had a proper connection string. My problem was that the driver was not being used, therefore was optimized out of the compiled war.

Be sure to import the driver:

import com.microsoft.sqlserver.jdbc.SQLServerDriver;

And then to force it to be included in the final war, you can do something like this:

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

That line is in the original question. This will also work:

SQLServerDriver driver = new SQLServerDriver();
Share:
284,065
Larry Watanabe
Author by

Larry Watanabe

I've done research in artificial intelligence, machine learning, specifically constructive induction and structural decision trees, worked for a variety of companies such in business intelligence, forms automation, and banking. http://www.google.com/profiles/larrywatanabe , http://stackoverflow.com/users/118860/larry-watanabe , http://larrywatanabe.blogspot.com , http://portal.acm.org/citation.cfm?id=125337 , http://www.programmersheaven.com/user/larrywatanabe/ , http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/w/Watanabe:Larry.html , http://portal.acm.org/citation.cfm?id=211243 , http://www.interaction-design.org/references/authors/larry_watanabe.html Last activity , http://www.aaai.org/Papers/AAAI/1990/AAAI90-131.pdf , http://www.wipo.int/pctdb/en/wo.jsp?wo=2004107121

Updated on July 08, 2022

Comments

  • Larry Watanabe
    Larry Watanabe almost 2 years

    I'm getting this exception when I try to run this program. It's one of the Microsoft examples. I've added the sqljdbc4.jar to the classpath in netbeans for both compile and Run, via the project properties. I also tested that the class could be found by using an import statement below - no error during compile, so it must be finding the jar.

    Could it be related to a dll or some sql dll that the sqldbc4.jar references?

    This is the exact exception, and below is the exact code, except for password.

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

    }

  • László van den Hoek
    László van den Hoek about 12 years
    An old version of the driver is to blame for the confusion. The new version does mention the proper prefix to use (jdbc:sqlserver://).
  • screechOwl
    screechOwl about 12 years
    A bunch of websites have the URL wrong. They have 'jdbc:microsoft:sqlserver://server:port;DatabaseName=dbname ' instead of 'jdbc:sqlserver://server:port;DatabaseName=dbname '
  • Fathah Rehman P
    Fathah Rehman P almost 11 years
    @Aniket - please paste the complete exception you got
  • Aniket
    Aniket almost 11 years
    i am working on web application in netbeans 7.0.1 Exception is like : SEVERE: Java Runtime Environment (JRE) version 1.7 is not supported by this driver. Use the sqljdbc4.jar class library, which provides support for JDBC 4.0. SEVERE: java.lang.UnsupportedOperationException: Java Runtime Environment (JRE) version 1.7 is not supported by this driver. Use the sqljdbc4.jar class library, which provides support for JDBC 4.0.
  • Fathah Rehman P
    Fathah Rehman P almost 11 years
    @Aniket - you add sqljdbc4.jar to your project? If you are already added sqljdbc4.jar, then make sure that sqljdbc.jar is not added to project
  • Demodave
    Demodave over 8 years
    Where are you supposed to put the driver?
  • mcemmy
    mcemmy over 5 years
    This works for me. Thanks. But I replaced Class.forName(driver).newInstance(); with DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); and added the dependency 'com.microsoft.sqlserver' in my pom in Mavin for it to work
  • Itération 122442
    Itération 122442 about 4 years
    Dead link to driver.
  • Jyotirmay
    Jyotirmay about 4 years
    Awesome... For application with java 8, this is the appropriate driver. not the 8.2.2.jre11 one which was giving me a hell lot of connection issue.