Unable to connect to SQL Server via JDBC. No suitable drivers found for jdbc: sqlserver: //

advertisements

I simply want to use SQL Server database in my HTTP Servlet program but my program can't seem to connect to the database. It gives me the following error:

No suitable driver found for jdbc:sqlserver://localhost:1433;databaseName=Bookyard;integratedSecurity=true;

This is my connection method.

package practice.bookyard.server.util;

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

public class Database {

    public static Connection getConnection() {
        String url = "jdbc:sqlserver://(LocalDb)\\MSSQLLocalDB:1433;databaseName=Bookyard;integratedSecurity=true;";
        Connection connection = null;

        try {
            connection = DriverManager.getConnection(url);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return connection;
    }

}

I had the sever name as localhost:1433 earlier but I changed it to the SQL Server instance name (LocalDb)\\MSSQLLocalDB:1433 but it still seems to pick up the old name.

Also, I am not sure how to provide the right connection string when connecting to SQL Server localdb.

I am using Eclipse for Java EE, Mars 2, and I downloaded Microsoft JDBC drivers for SQL 6.0 from this website.

I ran the installation, unzipped the contents of the resulting folder. Then, I added the sqljdbc42.jar file to the build path as I am targeting JDK 1.8.

UPDATE

Upon Scary Wombat's suggestion, I have also added the path to the sqljdbc42.jar file to my classpath.

However, I still get the same error.

I am pretty confident this is a reflection issue, in that the type loader isn't able to resolve the driver type from my connection string. Which means, the connection string syntax I am using is wrong.

I changed my connection string to read as follows:

String url = "jdbc:sqlserver://localhost:1433;
instance=(LocalDb)\\MSSQLLocalDB;
databaseName=Bookyard;integratedSecurity=true;";

However, I still not only get the same error but the exception message I receive still has my old connection string. So, clearly, there's also some caching going on, I just don't know where. Who is caching my connection string and how do I refresh / clear that cache?

Could you please tell me how to provide a SQL Server instance name if I am connecting to localdb and not on the main SQL Server instance?


As @ScaryWombat and @JozefChocholacek had hinted, it turned out to be a class path issue. Apparently, you have to copy and paste just the sqljdbc42.jar file, and this file only directly into the WEB-INF\lib folder and not within any sub-folder.

I did that it still gave me that error.

That was because the WEB-INF folder structure, when I viewed it in the Project Explorer, still had the old folder structure. So, I right-clicked on the WEB-INF folder in the Project Explorer and selected the Refresh command.

I also updated my environmental variable CLASSPATH to point it to the WEB-INF folder and that error went away.